שאלה טפשית ב C

אלי ו.

New member
שאלה טפשית ב C

יש לי תכנית ישנה ב C ואני רוצה לגרום לכל ה printf לצאת לקובץ נתון, איך אפשר לעשות את זה מהתכנית בלי לשנות את כל ה printf ל fprintf? משהו שיעבוד כאילו קראו לתכנית
myprog > output.log​
 

zagzagzag

New member
באיזו מערכת הפעלה?

על לינוקס/יוניקס אתה יכול לעבוד עם dup, אני לא יודע אם זה קיים גם בחלונות. אני לא מכיר פונקציה סטנדרטית שעושה את מה שאתה מבקש. יש את freopen אבל עדיין תצטרך להשתמש ב-fprintf.
 

selalerer

New member
ולמה שלא תעשה את זה בדיוק כמו שכתבת

בדוגמא? בכל אופן גם עורך טקסט בעל יכולות גבוהות יוכל בקלות להחליף לך את כל הprintfים לfprintf ולתת לו פרמטרים ע"פ בחירתך.
 

annefan

New member
למה לא איך שכתבת?

או לחילופין להגדיר אוביקט FILE * גלובלי בשם מסוים, לפתוח אותו בתחילת main, להחליף את כל printf ל-fprintf, וגמרנו?
%s/printf\(/fprintf(file, /g​
לדוגמא ב-vim.
 

אלי ו.

New member
הסיפור פשוט ומעצבן

יש לי תכנית שרצה בחלונות שצריכה לקרוא לתכנית DOS שכתב תכניתן אחר. התכנית מקבלת שני שמות קבצים ומפנה את הפלט כפי שכתבתי. הבעיה היא שחלונות (@*#&*#&) מוגבלת בגודל הפרמטרים ל CreateProcess לכ 127 תוים ואני מנסה לצמצם בפקודה ככל האפשר. (עשו ניסוי פשוט, משורת ההפעל בחלונות נסו להריץ קובץ batch פשוט עם פרמטרים ארוכים, זה יעבוד מחלון DOS אבל לא משורת ההפעל)
 

ChipsMan

New member
אממ..

נראה לי שצריך לפתור קובץ ולקחת את ה-handle שלו למשתנה הגלובלי stdout. בעיקרון printf הוא בעצם מקרה פרטי של fprintf שכותב לקובץ stdout. ז"א בתחילת התוכנית לעשות משהו כזה:
stdout = fopen("bla.txt", "rw");​
ובסוף התוכנית לעשות
fclose(stdout)​
 
למעלה