如何确定其他进程是否正在使用文件描述符?

时间:2011-07-10 05:58:14

标签: c++ sockets file-descriptor

我正在用C ++编写一个用于Linux环境的应用程序,它将在多进程设置中运行(即程序调用fork())。作为应用程序的一部分,我正在创建一些文件描述符(在这种情况下是套接字),我想知道程序是否有可能确定有多少其他进程打开了该文件描述符。在这种情况下,我想在关闭文件描述符的最后一个副本之前执行特殊操作。

我知道像TCP套接字这样的文件描述符的close实现似乎可以做到这一点,但我不确定如何。

编辑:我正在寻找一种方法来实现这一点,而无需访问主代码或fork代码。代码位于库中,为其他应用程序提供这些套接字。

示例代码:

void handle_socket(int socket_fd) {
    // determine number of processes with this socket_fd open.
    if (num_proc == 1) {
        // Special code
    }
    close(socket_fd);
}

int main(int argc, char *argv[]) {
    int socket_fd = socket(...);
    if (fork() == 0) {
        //action 1
    } else {
       // action 2
    }
    handle_socket(socket_fd);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果您正在编写生成子进程的main(),那么您应该等待这些子进程完成。