我正在用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;
}
答案 0 :(得分:1)
如果您正在编写生成子进程的main(),那么您应该等待这些子进程完成。