2012-08-17 9 views
5

मुझे एक ऐसा फ़ंक्शन मिला है जो उपयोगकर्ता को चाहे जो भी हो, उसके आधार पर, या तो stdout, या फ़ाइल में लिखने में सक्षम होना चाहिए। हालांकि यह मानक बाहर डिफ़ॉल्ट है। इसे पूरा करने के मैं निम्नलिखित (ऋण त्रुटि जाँच आदि) कर रहा हूँ:एक FILE * stdout पोर्टेबल के बराबर सेट कर रहा है?

FILE* out; 
if (writeToFile) { /*Code to open file*/; } 

else 
    out = stdout; 

// ...rest of the function goes here 

if (out != stdout) 
    fclose(out); 

यह निश्चित रूप काम कर देता है, लेकिन मैं पता नहीं कैसे यह पोर्टेबल है। और यदि यह नहीं है, और/या इसके साथ कोई और समस्या है, तो मुझे इसके बारे में कैसे जाना चाहिए?

उत्तर

8

हाँ, यह पोर्टेबल है और यह (जैसे Posix पर close(fileno(stdout)) बुला या dup का उपयोग करके) बशर्ते आप *stdout के निम्न स्तर के कार्यान्वयन के साथ भी गड़बड़ नहीं है, ठीक है।

1

यह ठीक होना चाहिए। यदि आप डीएलएल की सीमा में पॉइंटर को आगे और आगे भेजते हैं तो आपको परेशानी हो सकती है (यानी, डीएलएल के बाहर सी कोड डीएलएल के अंदर सी कोड के लिए पॉडटर पास करता है), लेकिन इसके अलावा यह पोर्टेबल होना चाहिए।

संबंधित मुद्दे