我可以将文件描述符共享给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。
沧海一幻觉
TA贡献1824条经验 获得超5个赞
您可以使用此线程中描述的方法或者(更常规)方法,通过创建它来在相关进程(通常是父子或兄弟)之间共享它,分叉进程自动接收副本。
实际上,分叉进程会获取所有FD并且可以使用它们,除非它们关闭它们(这通常是一个好主意)。
因此,如果父级分叉两个孩子,如果他们都有一个文件描述符,他们没有关闭,现在它被共享(即使父母随后关闭它)。例如,这可能是从一个孩子到另一个孩子的管道。这就是shell重定向的方式
ls -l | more
工作。
- 3 回答
- 0 关注
- 969 浏览
添加回答
举报
0/150
提交
取消