עבור לתוכן

יצירת LOG FILE ב-C

Featured Replies

פורסם

שלום לכם.

כתבתי תוכנית כלשהי ב-C ואני רוצה שאת כל הפלט שהיה לי לCOMMAND LINE (דרך printf) אני אוכל לשמור בLOG FILE.

ניסיתי 2 דרכים אחת דרך פונקצית לוג שעושה גם כתיבת לקובץ כלשהו דרךvfprintf וגם למסך דרך vprintf הבעיה שלה שהיא איטית מדי ויוצרת לי Delay כלשהו שלא טוב לי בתוכנית, השיטה השניה היא להריץ בcmd את הקובץ שלי עם תוספת של log< אבל הבעיה שזה אז לא מציג לי על המסך את הפלט אלא רק כותב לקובץ.

האם יש פונקציה שבסוף התוכנית פשוט לוקחת את כל הפלט שלה ומעתיקה אותו לקובץ? או פונקציה שלוקחת את כל מה שנכתב בחלון CMD ושמה בתוך קובץ?

פורסם

וחוץ מזה אל תדפיס שום דבר בתוך לולאות או קוד שהביצועים שלהם קריטיים, כי פלט וגם string formatting הם דברים איטיים.

פורסם
  • מחבר

לפי מה שאני הבנתי מקריאה בגוגל (ולמעשה נסיון מעשי קל) שה-tee זו פקודת powershell של מיקרוסופט. הצלחתי שהיא תעבוד, הבעיה היא שהפלט שלי יוצא לCMD ולא לcmdlet ככה שהtee לא רואה את הפלט.

האם יש סיכוי שאני לא מבין משהו נכון? כי הפקודה הזו אכן עושה בדיוק את מה שאני צריך מבחינה פונקציונלית (רק שזה לא עובד).

ולגבי הprintf שמאיטים, כן אני מודע לזה אבל לרוב כשמתבצע printf זה אחרי שפעולה מתבצעת וזה לא פוגע לי בביצועים.

פורסם

זו גם פקודה ב cygwin

פורסם
  • מחבר

זו גם פקודה ב cygwin

אהההה, זו ככל הנראה תהיה שאלה מטומטמת, אבל מה זה cygwin? אני לא מתמצא בתחום במיוחד...

פורסם

מאפשר להריץ סביבת יוניקס (משם הפקודה במקור) בחלונות. אם כי זה לא בהכרח יהיה מהר יותר משמעותית מלהדפיס את ה vprintf לתוך string ולהדפיס את המחרוזת הזו פעמיים, גם לקובץ וגם למסך.

פורסם

שלום לכם.

כתבתי תוכנית כלשהי ב-C ואני רוצה שאת כל הפלט שהיה לי לCOMMAND LINE (דרך printf) אני אוכל לשמור בLOG FILE.

ניסיתי 2 דרכים אחת דרך פונקצית לוג שעושה גם כתיבת לקובץ כלשהו דרךvfprintf וגם למסך דרך vprintf הבעיה שלה שהיא איטית מדי ויוצרת לי Delay כלשהו שלא טוב לי בתוכנית, השיטה השניה היא להריץ בcmd את הקובץ שלי עם תוספת של log< אבל הבעיה שזה אז לא מציג לי על המסך את הפלט אלא רק כותב לקובץ.

האם יש פונקציה שבסוף התוכנית פשוט לוקחת את כל הפלט שלה ומעתיקה אותו לקובץ? או פונקציה שלוקחת את כל מה שנכתב בחלון CMD ושמה בתוך קובץ?

מה אתה רציני?

האם אתה כותב מערכת REAL-TIME לבקרה על טילים גרעיניים או משהו כזה? זה נשמע לי ממש מוזר...

ניסית להריץ פרופיילר לראות איפה הבעייה בדיוק?

האם הDELAY שנוצר לך גורם לבעיות סנכרון או לבעיות ביצועים , אם מדובר בבעיות סנכרון אז הרי שאפשר לסדר את הכל עם LOCK-ים.

אם מדובר בבעיית ביצועים אז כמו שאמרתי , משהו מאוד מוזר , תבדוק את הפונקציה הזו , ייתכן שאתה פותח כל פעם את הקובץ מחדש

על כל כתיבה לLOG? , פונקציה כזו , על אף שמשלבת כתיבה לדיסק לא אמורה באמת להשפיע על ביצועים בתוכניות.

אלא אם כן אתה כותב אפליקציית REALTIME כבדה , מה שקשה לי להאמין שאתה עושה.

עשות לשיפור ביצועים:

- נסה לכתוב מאקרו במקום פונקציה , כך הכל יעשה INLINE.

- את קובץ הLOG תפתח פעם בתחילת התוכנית ותסגור פעם אחת בסיום התוכנית.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים