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

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

假设我有2个进程,ProcessA和ProcessB。如果我int fd=open(somefile)在ProcessA中执行,那么我可以将文件描述符的值fd通过IPC传递给ProcessB并让它操作同一个文件吗?



哔哔one
浏览 970回答 3
3回答

跃然一笑

如果两个进程都属于同一个用户,那么您可以简单地使用procfs。char fd_path[64];  // actual maximal length: 37 for 64bit systemssnprintf(fd_path, sizeof(fd_path), "/proc/%d/fd/%d", SOURCE_PID, SOURCE_FD);int new_fd = open(fd_path, O_RDWR);当然你需要一些IPC机制来分享价值SOURCE_FD。

沧海一幻觉

您可以使用此线程中描述的方法或者(更常规)方法,通过创建它来在相关进程(通常是父子或兄弟)之间共享它,分叉进程自动接收副本。实际上,分叉进程会获取所有FD并且可以使用它们,除非它们关闭它们(这通常是一个好主意)。因此,如果父级分叉两个孩子,如果他们都有一个文件描述符,他们没有关闭,现在它被共享(即使父母随后关闭它)。例如,这可能是从一个孩子到另一个孩子的管道。这就是shell重定向的方式ls -l | more工作。
打开App,查看更多内容
随时随地看视频慕课网APP