为了账号安全,请及时绑定邮箱和手机立即绑定

我可以将文件描述符共享给Linux上的另一个进程,还是它们是进程的本地进程?

我可以将文件描述符共享给Linux上的另一个进程,还是它们是进程的本地进程?

哔哔one 2019-08-09 09:47:31
我可以将文件描述符共享给Linux上的另一个进程,还是它们是进程的本地进程?假设我有2个进程,ProcessA和ProcessB。如果我int fd=open(somefile)在ProcessA中执行,那么我可以将文件描述符的值fd通过IPC传递给ProcessB并让它操作同一个文件吗?
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

如果两个进程都属于同一个用户,那么您可以简单地使用procfs。


char fd_path[64];  // actual maximal length: 37 for 64bit systems

snprintf(fd_path, sizeof(fd_path), "/proc/%d/fd/%d", SOURCE_PID, SOURCE_FD);

int new_fd = open(fd_path, O_RDWR);

当然你需要一些IPC机制来分享价值SOURCE_FD。


查看完整回答
反对 回复 2019-08-09
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

您可以使用此线程中描述的方法或者(更常规)方法,通过创建它来在相关进程(通常是父子或兄弟)之间共享它,分叉进程自动接收副本。

实际上,分叉进程会获取所有FD并且可以使用它们,除非它们关闭它们(这通常是一个好主意)。

因此,如果父级分叉两个孩子,如果他们都有一个文件描述符,他们没有关闭,现在它被共享(即使父母随后关闭它)。例如,这可能是从一个孩子到另一个孩子的管道。这就是shell重定向的方式

ls -l | more

工作。


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 969 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信