天天看點

程序間傳遞檔案描述符fd

程式間傳遞檔案描述符fd

衆所周知,子程序會繼承父程序已經打開的檔案描述符fd,但是fork之後的是不會被繼承的,這個時候是否無能無力了?答應是NO。Linux提供了一個系統調用sendmsg,借助它,可以實作程序間傳遞檔案描述符fd,而且不僅限于父程序到子程序。sendmsg函數的原型如下:

#include 

ssize_t sendmsg(int socket, const struct msghdr *message, int flags);

ssize_t recvmsg(int socket, struct msghdr *message, int flags);

recvmsg函數用來接收fd,這裡的socket必須為UnixSocket(AF_UNIX),在Linux上執行man 7 unix,并搜尋SCM_RIGHTS,即看到有關說明:Send or receive a set of open file descriptors from another process。

通過sendmsg發送的fd,并不是将fd值傳遞給目标程序,而是活生生地在目标程序空間裡複制指向同一個file結構體的fd,是以不要期望在兩個程序中,fd值相同。

具體的使用示例,請baidu或google關鍵詞:sendmsg fd,即可找到,這裡就不多說了。

繼續閱讀