2013-05-23 9 views
8

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

मैं एक प्रोग्राम चला रहा हूं जो आउटपुट उत्पन्न करता है जब ./ar कहा जाता है। आउटपुट इस तरह दिखता है:

-0.00781 0.02344 0.98828               
-0.01172 0.02734 0.98828               
-0.01562 0.02344 0.98047               
-0.00781 0.02344 1.00000               
-0.00391 0.02344 0.98438 

आउटपुट की एक नई पंक्ति हर सेकेंड में लिखी जाती है।

जब मैं इस ./ar > log जैसे कोड को कॉल करता हूं और कुछ सेकंड के बाद ctrl-c का उपयोग कर प्रोग्राम को मारता हूं, तो फ़ाइल log खाली है।

मैं इस कोड को एम्बेडेड सिस्टम पर चला रहा हूं। सिस्टम में एक लिखने योग्य विभाजन है जो विभाजन है जिसमें मैं चल रहा हूं, और मेरे पास लेखन पहुंच है क्योंकि मैं रूट के रूप में लॉग इन हूं।

+10

जब आप रीडायरेक्ट करते हैं, आउटपुट ब्लॉक-बफर किया जाता है, लाइन-बफर नहीं किया जाता है। यदि ब्लॉक पूर्ण होने से पहले आप Ctrl-C दबाते हैं, तो फ़ाइल में कुछ भी लिखा नहीं जाता है। आप फ़ाइल को तुरंत लिखने के लिए 'fflush (stdout)' का उपयोग कर सकते हैं। –

+0

धन्यवाद, मेरी समस्या को ठीक करने के लिए, मुझे प्रत्येक printf कथन से पहले इस पंक्ति को चलाने के लिए था। – James

+3

'printf' के बाद इसे करना अधिक प्राकृतिक है। –

उत्तर

-1

कारण यूनिक्स सिस्टम की आलसी लेखन अवधारणा है।

+0

एक और बात के रूप में आप अपने उत्पादन पुनः निर्देशित और अपनी प्रक्रिया की हत्या कर रहे हैं तो इसका मतलब है उत्पादन अभी तक तैयार नहीं है। पाइप ऑपरेशन अगली प्रक्रिया में आउटपुट केवल तभी होता है जब पहली प्रक्रिया का उत्पादन तैयार हो। –

1

क्या आप वाकई कॉल में मानक आउटपुट देख रहे हैं ./ar? यह मानक त्रुटि हो सकती है। तो, कोशिश करें ./ar> लॉग 2> गलती 2 फाइलें, एक stdout के लिए और एक stderr के लिए।

या उपयोग करें ./ar 2> & 1> दोनों स्ट्रीमों के लिए एक फ़ाइल प्राप्त करने के लिए लॉग इन करें।

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