पर stdout को पुनर्स्थापित करें मैं एक बहु-थ्रेड प्रोग्राम के साथ काम कर रहा हूं।सी टर्मिनल
सबसे पहले मैं अपने stdout को एक निश्चित फ़ाइल पर रीडायरेक्ट करता हूं। वहां कोई समस्या नहीं है (मैंने dup2(fd, 1)
का उपयोग किया जहां fd
फ़ाइल के लिए फाइल डिस्क्रिप्टर है)।
बाद में, मुझे अपने stdout को फिर से टर्मिनल पर रीडायरेक्ट करने की आवश्यकता है।
मेरा पहला दृष्टिकोण:
/*Declaration*/
fpost_t stream_sdout;
/*code*/
if (fgetpos(stdout, &stream_sdout) == -1)
perror(Error:);
यह अवैध कहते हैं चाहते हैं।
कोई विचार नहीं कि यह क्यों हो रहा है।
लेकिन अगर मुझे यह काम करने के लिए मिलता है, तो मुझे केवल fsetpos(stdout, &stream_stdout)
का उपयोग करने की आवश्यकता है और इसे काम करना चाहिए।
मेरा दूसरा विचार, स्थिति वर्णन 4 पर dup2(stdout, 4)
फ़ाइल डिस्क्रिप्टर तालिका में stdout की प्रतिलिपि बनाना था, लेकिन यह या तो काम नहीं कर रहा है।
मैं मानक आउटपुट को अपने मूल गंतव्य (टर्मिनल, पाइप, फ़ाइल, जो कुछ भी) पर वापस कैसे स्विच कर सकता हूं?
मुझे एहसास है कि इस तरह के आसपास 'stdout' को स्थानांतरित करने का प्रयास करना शायद एक बुरा विचार है - _ fgetpos()' में _terminal_ रिपोर्ट को वास्तव में क्या स्थिति चाहिए? 'Fwrite() 'या' fprintf()' या 'write() 'और टर्मिनल पर आउटपुट को'/dev/tty' के माध्यम से आउटपुट के जरिए इसे फ़ाइल और आउटपुट क्यों खोलें? – sarnold
@ कर्नाल्ड: शायद क्योंकि प्रोग्राम में पुस्तकालय या अन्य अस्थिर कोड हैं जो 'stdout' के लिए कड़ी मेहनत कर रहे हैं। – wallyk
@ कर्नाल्ड मैंने वास्तव में इसे उस सकारात्मकता के बारे में सोचा नहीं था। मुझे जल्दी से जांचने दो। – Alessandroempire