我可以將文件描述符共享給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 關注
- 996 瀏覽
添加回答
舉報
0/150
提交
取消