gpt4 book ai didi

关闭 FILE 指针而不关闭底层文件描述符

转载 作者:太空狗 更新时间:2023-10-29 16:32:18 24 4
gpt4 key购买 nike

通过使用 fdopen()fileno() 可以打开带有现有文件描述符的流。然而,关闭文件的正确方法是,一旦您使用流打开文件,就使用 fclose() FILE 指针。如何关闭流,但保留打开的文件描述符?

此行为类似于调用 fflush(),然后调用 fileno(),然后不再使用 FILE 指针,除了关闭。另一个问题是,如果您再次 fdopen(),现在有多个 FILE 指针,您只能关闭其中一个。

最佳答案

如果你在 POSIXy 系统上(我假设你是,因为你有 fileno()),你可以使用 dup()克隆文件描述符:

int newfd = dup(fileno(stream));
fclose(stream);

或者你可以传递 fdopen() 一个重复的文件描述符:

FILE *stream = fdopen(dup(fd), "r");

无论哪种方式,fd 的另一个副本都不会用 FILE * 关闭。但是,请记住位置指针共享的,因此如果您同时使用两者,请小心。此外,当您关闭副本时,原始 fd 上持有的任何 fcntl()被释放。

关于关闭 FILE 指针而不关闭底层文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com