首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何克隆文件描述符?(不仅仅是复制)

如何克隆文件描述符?(不仅仅是复制)
EN

Stack Overflow用户
提问于 2021-07-17 08:59:09
回答 1查看 49关注 0票数 2

我想克隆一个文件描述符。因此,使用fcntl()更改它不会更改原始文件描述符。

在我的例子中,重新打开相同的路径不起作用,文件描述符可能指向管道或套接字。

背景:

我想在不阻塞的情况下从继承的文件描述符中读取。但是当我启用标志O_NONBLOCK时,父文件描述符也是非阻塞的,并且如果父文件描述符或其他任何东西使用相同的文件描述并将其设置为阻塞,则在使用它的所有进程中,该文件描述的所有文件描述符都是阻塞的。dup()调用也没有帮助,对fcntl()的调用将更改这两个文件描述符。当文件描述符为非阻塞时,父进程中断,而当文件描述符为阻塞时,子进程中断。

我不能使用recv(),因为它只在套接字上工作,文件描述符可以是套接字,也可以是常规文件、管道或先进先出。

在退出子进程之前,我可以尝试将文件改回非阻塞状态,但是当子进程以意外方式退出时,这可能不起作用。我不能改变父母。

EN

回答 1

Stack Overflow用户

发布于 2021-07-17 20:33:54

你所要求的是做不到的。像文件位置和某些I/O模式,包括O_NONBLOCK,都是整数文件描述符下open file description的属性。

新获取文件或类文件对象的函数(打开、管道、套接字等)分配新的和不同的文件描述。但是,正如您已经发现的,dup和fork以及friends为您提供了不同的描述符,这些描述符引用了共享的底层描述。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68416612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档