fclose(stdin)
अपरिभाषित व्यवहार है, जो एक बहुत बुरी बात है आह्वान करने के लिए stdin
(अस्पष्ट या स्पष्ट) के किसी भी आगे उपयोग के कारण बनता है। यह "इनपुट को रोकता नहीं है"।
close(fileno(stdin))
इनपुट पर किसी भी आगे प्रयास stdin
से, के बाद वर्तमान बफर समाप्त हो गया है, EBADF
के साथ विफल करने का कारण बनता है, लेकिन केवल जब तक आप एक और फ़ाइल, जिस स्थिति में है कि फाइल fd बन जाएगा खोलने # 0 और बुरी चीजें होगा होता है।
एक और अधिक मजबूत दृष्टिकोण हो सकता है:
int fd = open("/dev/null", O_WRONLY);
dup2(fd, 0);
close(fd);
कुछ जोड़ा त्रुटि जाँच के साथ
। इससे यह सुनिश्चित होगा कि सभी पढ़ते हैं (वर्तमान बफर समाप्त होने के बाद) त्रुटियों में परिणाम होता है। यदि आप बस उन्हें ईओएफ में परिणाम देना चाहते हैं, तो कोई त्रुटि नहीं, O_WRONLY
के बजाय O_RDONLY
का उपयोग करें।
स्रोत
2011-05-08 04:23:22
आप केवल fclose (stdin) कर सकते हैं, यह फ़ाइल हैंडल पर बंद() को कॉल करेगा। –