मैं आमतौर पर या तो stdin
से पढ़ता हूं या किसी फ़ाइल नाम से:
FILE *open_file(char *filename, FILE *fallback, char *mode)
{
FILE *fp = fallback;
if (filename != NULL) {
if ((fp = fopen(filename, mode)) == NULL) {
fprintf(stderr, "Error: cannot open '%s'!\n", filename);
exit(ERROR_CANNOT_READ_FILE);
}
}
if (fp == NULL) {
fprintf(stderr, "Error: file error!\n");
exit(ERROR_CANNOT_READ_FILE);
}
return fp;
}
int main(int argc, char* argv[]) {
FILE *fp = open_file(argc > 1 ? argv[1] : NULL, stdin, "r");
// some stuff...
if(!fclose(fp)) {
exit(EXIT_FAILURE);
}
}
इस उदाहरण में, मुझे fclose
के साथ समस्या हो सकती है। मैं न तो stdin
और न ही stdout
को बंद कर सकता हूं। मैं fp
को ठीक से और सशर्त रूप से कैसे बंद कर सकता हूं?
क्या मुझे fp
बंद करना चाहिए?
1
nowox
10 मार्च 2020, 16:38
1 उत्तर
सबसे बढ़िया उत्तर
यदि कोई फ़ाइल सफलतापूर्वक बंद हो जाती है लेकिन आपके कोड में fclose () 0 देता है
if(!fclose(fp)) {
exit(EXIT_FAILURE);
}
यदि fclose () फ़ाइल को सफलतापूर्वक बंद कर देता है तो मुख्य () EXIT_FAILURE लौटाता है, ताकि आप इसे बदल सकें
if(fclose(fp)) {
exit(EXIT_FAILURE);
}
या
if(fclose(fp)!=0){
exit(EXIT_FAILURE);
}
संपादित करें:
प्रश्न अधिक है: यदि stdin या stdout नहीं है तो क्या मुझे fp को बंद कर देना चाहिए?
if( (fp!=stdin) && (fp!=stdout) )
if( fclose(fp) )
exit(EXIT_FAILURE);
या
if( (fp!=stdin&&fp!=stdout) && fclose(fp) )
exit(EXIT_FAILURE);
क्योंकि && एक शॉर्ट-सर्किटिंग ऑपरेटर है और बाएं से दाएं मूल्यांकन की गारंटी देता है
1
srilakshmikanthanp
11 मार्च 2020, 07:11
fclose
:if (fp != stdin && !fclose(fp)) ...
पर कॉल करने से पहलेstdin
के लिए परीक्षण कर सकते हैं?stdin
औरstdout
में से किसी एक को या दोनों को बंद कर सकते हैं। आपif (fp != stdout) …
का परीक्षण कर सकते हैंfclose()
त्रुटि देता है?) कृपया विस्तार करें।stdin
याstdout
नहीं है तो क्या मुझेfp
को बंद कर देना चाहिए?