[英]Mixing fdopen() and open() -> bad file descriptor
int source = open("hi", O_CREAT | O_RDONLY);
int dest = open("resultfile", O_CREAT | O_RDWR | O_TRUNC);
FILE* source1 = fdopen(source, "r");
FILE* dest1 = fdopen(dest, "w+");
// outside of a testcase I would write something into 'resultfile' here
close(source);
close(dest);
fclose(source1);
fclose(dest1);
int sourcef = open("resultfile", O_RDONLY);
printf(strerror(errno)); // <--- Bad file descriptor
我不明白為什么? 如何成功地將基於流的IO與open()混合使用?
我正在使用的庫只接受一個整數fd(並且庫在內部負責關閉它,可能是close()),但我仍然需要使用該文件,我不知道那是怎么回事沒有像(fread(),ftell()等f()調用那樣正確的可能
fclose
呼吁close
你。 如果你想在調用fclose
后保持fd,請首先dup
fd。
int fd = open(...);
int fd2 = dup(fd);
FILE *fp = fdopen(fd2);
fclose(fp);
// fd is still valid.
示例中的錯誤文件描述符錯誤消息從fclose(dest1)
調用延遲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.