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

How to determining if other processes are using a file descriptor?

本文关键字:文件 描述 何确定 其他 进程 是否      更新时间:2023-10-16

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

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

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

示例代码:

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;
}

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