簡體   English   中英

混合fdopen()和open() - >壞文件描述符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM