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;
}
如何使用信号灯和/或共享内存位置来跟踪打开文件描述符的数量? –
可能会工作,但它会依赖于能够将代码添加到任何分叉调用,以执行计数代码。我的例子显示有权访问代码,但情况并非总是如此。 –