2011-07-10 27 views
0

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

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

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

示例代码:

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

如何使用信号灯和/或共享内存位置来跟踪打开文件描述符的数量? –

+0

可能会工作,但它会依赖于能够将代码添加到任何分叉调用,以执行计数代码。我的例子显示有权访问代码,但情况并非总是如此。 –

回答

1

如果你正在写在main()会派生的子进程,你应该等待这些孩子们来完成。

相关问题