2009-03-16 30 views
7

मैंने एक पाइप बनाया और मैंने उन पाइपों में स्ट्रीम 1 & 2 (stdout & stderr) को ओवरराइट करने के लिए dup2() का उपयोग किया।मैं fprintf का उपयोग कैसे कर सकता हूं और पाइप पर लिख सकता हूं?

अब मैं स्ट्रीम 1 या 2 को लिखने के लिए fprintf का उपयोग करना चाहता हूं, लेकिन मेरा प्रोग्राम पाइप के दूसरी तरफ कुछ भी प्राप्त नहीं कर रहा है। मैंने printf() का उपयोग करने का प्रयास किया है, लेकिन मुझे यकीन नहीं है कि यह डिफ़ॉल्ट रूप से stdout या स्ट्रीम 1 को लिखता है। यदि यह धारा 1 को लिखता है, तो मुझे लगता है कि यह मेरे कोड में कहीं भी गहरी समस्या है।

अनिवार्य रूप से मैं पूछ रहा हूं, धारा का प्रतिनिधित्व करने वाला एक int दिया गया है, मैं fprintf() में उपयोग के लिए उपयुक्त फ़ाइल कैसे प्राप्त कर सकता हूं?

उत्तर

6

आप एक फ़ाइल वर्णनकर्ता है और एक FILE* चाहते हैं, आप उपयोग कर सकते हैं fdopen

FILE *fdopen(int fd, const char *mode); 

fdopen एक POSIX समारोह और man fdopen में दर्ज है। रिवर्स करने के लिए आप fileno

+0

का उपयोग कर सकते हैं क्या आप वर्णनकर्ता, फ़ाइल सूचक, या तो दोनों को बंद कर सकते हैं? – Bernard

+0

फ़ाइल डिस्क्रिप्टर तब तक खुला रहता है जब तक कि आप स्ट्रीम को फ्लेक्स न करें, उस बिंदु पर यह मैनपेज के अनुसार फ़ाइल डिस्क्रिप्टर को बंद कर देगा। –

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

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