我必须使用一个跨平台库来传递FILE*对象。
我从另一个源获得一个文件描述符(继承的),我希望在fd进程之间保持相同的。
目前,我使用fdopen将文件描述符转换为FILE*对象。
我的问题是,用于清理fclose对象的FILE*关闭了连接的文件描述符。
我非常想在这个文件描述符被使用之后保留它。
有没有办法从FILE*拯救文件描述符?
有什么办法把它拆开吗?
还是用虚拟文件替换FILE*中的文件描述符的方法?
这需要跨平台,不管怎么说,整个POSIX都很好。
发布于 2014-04-11 09:40:15
我的问题是,用于清理
fclose对象的FILE*关闭了连接的文件描述符。
您可以使用dup(2)获取描述符的副本。那么fclose(3)所做的fclose(3)就不会做任何事情了。
我需要保持完全相同的fd号码
然后在fclose:dup2(savedfd, rescuedfd)之后再次调用dup2(savedfd, rescuedfd)
发布于 2014-04-11 09:55:18
假设fd是您的文件描述符,f是您的文件*从中获得。也许像下面这样的东西能起作用:
fd2 = dup(fd);
fclose(f);
dup2(fd2, fd);
close(fd2);发布于 2014-04-11 09:49:32
当您从另一个源获得文件描述符时,尝试从该文件描述符获取其文件名。(有些人说它可能使用特定于平台的方法。( -google .)
一旦您获得文件名,然后再次打开它并获取文件*并完成您的工作,并使用fclose清理它。
你原来的fd不会被打扰。
https://stackoverflow.com/questions/23008895
复制相似问题