פורסם 2007 בינואר 1918 שנים שלום ,אני רוצה לנתב את הפלט מהמסך לקובץ זאת בעזרת הפונקציה freopen , עכשיו לאחר הפעולה אני רוצה להחזיר שוב את הפלט למסך איךבעצם זה מתבצע ? לא הצלחתי למצוא דוגמא רלוונטית , אשמח אם מישהו יוכל לעזור...תודה
פורסם 2007 בינואר 1918 שנים לא מומלץ לעשות דברים כמו לנתב מחדש את הפלט, או לשחק עם stdin ו-stdout.הנה רק כמה סיבות שחשבתי עליהם תוך דקה:- איך אתה יודע ש-stdout זה בכלל המסך?- אולי מישהו ניתב את הפלט לקובץ?- אולי זה בכלל pipe או אפילו הפלט נותב בכלל ל-socket?- האם הפלט הוא line buffered או לא?- מה יקרה כאשר תעשה freopen? האם הצד השני עלול לקבל broken pipe?בקיצור, אתה בטוח שזה מה שאתה רוצה לעשות? אני הייתי מנסה לחשוב שוב על הבעיה ולמצוא פתרון יותר טוב.אבל בכל מקרה: http://wwwcgi.rdg.ac.uk:8081/cgi-bin/cgiwrap/wsi14/poplog/man/3C/freopenhttp://www.cplusplus.com/freopenעריכה:השאלה עניינה אותי, אז חיטטתי קצת ברשת, והמסקנה שלי היא לחזור על ההמלצה: לא לעשות reopen ל-stdout.הנה קצת מידע: http://c-faq.com/stdio/undofreopen.html
פורסם 2007 בינואר 2018 שנים מחבר אני מדבר על C בסביבת יוניקס , הברירת מחדל של הSTDOUT היא אכן המסך , אני רוצה לשנות אותה בגדול per processשמתי שאני ארצה אני פשוט אנתב אותה לקובץ ... (סטייל ניתוב לקובץ במעטפת ע"י <<)... האם אני צריך ליצור תהליך חדש בעזרת FORK ולבצע את זה שם כלומר לבצע את השינוי בתהליך נפרד ולאחר סיום התהליך המצב יחזור לקדמותו או שיש דרך אחרת להחזיר את המצב לקדמותו בלי ליצור תהליך חדש, תודה
פורסם 2007 בינואר 2018 שנים טכניקה מקובלת אחת זה להשתמש ב-dup או dup2 ברמת ה-file descriptor, ולא דרך freopen.עברו כמה שנים מאז שעשיתי את זה, אבל הרעיון הוא:if ( fork() == 0 ){ /* in child process */ (open output file and get its fd in out_fd) close(1); /* 1 is stdout */ dup( out_fd ); /* dup will make sure that the newly released fd 1 will be chosen */ /* continue work, or do execp */}זה עלול להיות overkill אם אתה בסה"כ רוצה משהו פשוט. בד"כ עדיף פשוט לעבוד עם fprintf ולהפנות אותו לקובץ אחר בהתאם לצורך.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.