2008-10-18 10 views
27

पर्ल में, मैं लिख सकते हैं:सी ऑटोफ्लश के बराबर (प्रत्येक लिखने के बाद फ्लश स्टडआउट)?

$|++; 

और कुछ भी STDOUT करने के लिए मुद्रित स्वचालित रूप से fflush() एड किया जाएगा।

क्या सी में समतुल्य है? दूसरे शब्दों में, क्या कोई तरीका है कि मैं प्रत्येक printf() के बाद स्वचालित रूप से stflout fflush करने के लिए stdio बता सकता हूं, जिस तरह से यह स्वचालित रूप से stderr flushes?

उत्तर

38

setvbuf(stdout, NULL, _IONBF, 0) आज़माएं। यह stdout को unbuffered (_IONBF) मोड में बदलता है।

6

setbuf() और setvbuf() पर एक नज़र डालें।

13

मैंने यह नहीं किया है, लेकिन _IOLBF सही जवाब होगा।

$ आदमी setvbuf
...
नाम
setvbuf - एक धारा

SYNOPSIS
# शामिल <stdio.h>

int setvbuf(FILE *restrict stream, char *restrict buf, int type, 
      size_t size); 

वर्णन
setvbuf को बफरिंग आवंटित() फ़ंक्शन का उपयोग स्ट्रीम द्वारा इंगित धारा के बाद खुले से जुड़ा हुआ हो सकता है फ़ाइल लेकिन किसी भी अन्य ऑपरेशन से पहले (setvbuf() के असफल कॉल के अलावा स्ट्रीम पर किया जाता है। तर्क प्रकार निर्धारित करता है कि स्ट्रीम को कैसे बफर किया जाएगा, निम्नानुसार:

* {_IOFBF} shall cause input/output to be fully buffered. 

    * {_IOLBF} shall cause input/output to be line buffered. 

    * {_IONBF} shall cause input/output to be unbuffered. 
संबंधित मुद्दे