मेरे सी प्रोग्राम के भीतर मैं अस्थायी रूप से STDOUT को "/ dev/null" (उदाहरण के लिए) पर रीडायरेक्ट करना चाहता हूं। फिर "/ dev/null" पर लिखने के बाद मैं STDOUT को पुनर्स्थापित करना चाहता हूं। मैं इसे कैसे प्रबंधित करूं?मैं सी प्रोग्राम में किसी फ़ाइल में stdout को अस्थायी रीडायरेक्ट कैसे कर सकता हूं?
23
A
उत्तर
47
POSIX सिस्टम पर, आप इसे इस रूप में कर सकते हैं:
int bak, new;
fflush(stdout);
bak = dup(1);
new = open("/dev/null", O_WRONLY);
dup2(new, 1);
close(new);
/* your code here ... */
fflush(stdout);
dup2(bak, 1);
close(bak);
क्या आप चाहते हैं आगे व्यापकता में संभव नहीं है।
freopen
का उपयोग कर कोई भी समाधान गलत है, क्योंकि यह आपको मूल stdout
को पुनर्स्थापित करने की अनुमति नहीं देता है। stdout
पर असाइनमेंट द्वारा कोई भी समाधान गलत है, क्योंकि stdout
एक लवल्यू नहीं है (यह एक मैक्रो है जो FILE *
प्रकार की अभिव्यक्ति तक फैला हुआ है)।
संबंधित मुद्दे
- 1. प्रोग्राम के StdOut स्ट्रीम को सीधे सी # में कैसे लिखें?
- 2. मैं एक पर्ल कार्यक्रम में अस्थायी रूप से STDOUT को कैसे दबा सकता हूं?
- 3. मैं पर्ल में एक फ़ाइल में मानक आउटपुट कैसे रीडायरेक्ट कर सकता हूं?
- 4. मैं रूबी में अस्थायी रूप से stderr को कैसे रीडायरेक्ट कर सकता हूं?
- 5. stdout रीडायरेक्ट आउटपुट को रीडायरेक्ट रीडायरेक्ट
- 6. सी खोल में stdout को stderr को रीडायरेक्ट करें
- 7. मैं पर्ल में फ़ाइल में मरने के फ़ंक्शन के आउटपुट को रीडायरेक्ट कैसे कर सकता हूं?
- 8. सी ++ में अस्थायी टेक्स्ट फ़ाइल कैसे बनाएं?
- 9. सिस्टम() के आउटपुट को किसी फ़ाइल में रीडायरेक्ट कैसे करें?
- 10. सी प्रोग्राम में किसी अन्य प्रक्रिया में stdin को रीडायरेक्ट करें
- 11. मैं कैसे निर्धारित कर सकता हूं कि Console.Out को एक फ़ाइल में रीडायरेक्ट कर दिया गया है?
- 12. जावा में, मैं System.out को शून्य पर फिर से रीडाउट करने के लिए कैसे रीडायरेक्ट कर सकता हूं?
- 13. मैं सी में प्रोग्रामेटिक रूप से 'टी' को कैसे कार्यान्वित कर सकता हूं?
- 14. मैं कुकी कैसे सेट कर सकता हूं और फिर PHP में रीडायरेक्ट कर सकता हूं?
- 15. मैं किसी ऑरैक तालिका की सामग्री को किसी फ़ाइल में कैसे निर्यात कर सकता हूं?
- 16. मैं सी में बाहरी प्रोग्राम कैसे चला सकता हूं?
- 17. मैं प्रोग्राम को एक प्रोग्राम को कैसे हटा सकता हूं?
- 18. मैं एक्सकोड 4 में सी ++ प्रोग्राम कैसे चला सकता हूं?
- 19. मैं MATLAB में एक जीयूआई कैसे प्रोग्राम कर सकता हूं?
- 20. मैं php का उपयोग कर फ़ाइल को किसी अन्य फ़ोल्डर में कैसे स्थानांतरित कर सकता हूं?
- 21. मैं अस्थायी रूप से फ़ॉन्ट कैसे लोड कर सकता हूं?
- 22. मैं सी ++ में कैसे जांच सकता हूं कि std :: cout को फ़ाइल में रीडायरेक्ट किया गया है या नहीं?
- 23. हालांकि मैं प्रत्येक बच्चे को किसी XML फ़ाइल में नोड कैसे कर सकता हूं?
- 24. मैं लिनक्स प्लेटफॉर्म पर सी ++ में लिखने के लिए एक अस्थायी फ़ाइल कैसे बना सकता हूं?
- 25. किसी ज़िप फ़ाइल प्रोग्राम में
- 26. क्या मैं प्रोग्राम के आउटपुट को gvim पर रीडायरेक्ट कर सकता हूं?
- 27. मैं पाइथन में विंडोज़ पर नामित अस्थायी फ़ाइल कैसे बना सकता हूं?
- 28. मैं सी से बाहरी प्रोग्राम कैसे चला सकता हूं और इसके आउटपुट को पार्स कर सकता हूं?
- 29. मैं डेटाटेबल को सी # में एक एक्सएमएल फ़ाइल में कैसे परिवर्तित कर सकता हूं?
- 30. मैं बाल प्रक्रिया के stdout आउटपुट को कैप्चर कैसे कर सकता हूं?
डुप्ली 2 का उपयोग न करें। नज़दीक (नया) और फिर डुप्लिकेट (1) का प्रयोग करें; डुप्लिकेट() सुनिश्चित करता है कि आपको सही वर्णनकर्ता मिल जाएगा। 'अगर newfd खुला था, तो किसी भी त्रुटि जो करीब() समय पर रिपोर्ट की गई थी, खो जाती है। एक सावधान प्रोग्रामर पहले नएएफडी बंद किए बिना डुप्ली 2 का उपयोग नहीं करेगा। ' –
@ मोरारुएलियन: मैंने बहुत ही जानबूझकर' dup2' का उपयोग किया। आपकी टिप्पणी में मेरे कोड बनाम सभी मिश्रित तर्क हैं, इसलिए मुझे यकीन नहीं है कि आपका बिंदु क्या है, लेकिन 'dup2' के बिना किसी भी समाधान में ** खतरनाक दौड़ की स्थिति ** है। 'Dup2 (x, y) 'का बिंदु' y' ** परमाणु रूप से ** x' की एक प्रति के साथ प्रतिस्थापित करना है। –