如何确定其他进程是否正在使用文件描述符
How to determining if other processes are using a file descriptor?
我正在为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(),则应该等待这些子进程完成。
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- I2C 文件描述符上的 I2C 总线可写/可读标志
- 许多文件描述符在调用sys_clone时
- AMQP-CPP >处理程序中的错误文件描述符
- 如何使用 WINAPI 和 C++ 提取可执行文件的文件描述?
- 正在等待在非阻塞文件描述符上长时间运行ioctl
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 如何强制文件描述符缓冲我的输出
- 如何从 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 获取本机套接字文件描述器?
- 哪个更适合从C++写入敏感的日志文件,在文件描述符上写()或文件上的fprintf()?
- 将 select() 与非基于文件描述符的输入一起使用
- accept(..) 似乎正在修改我给它的文件描述符参数
- 使用 Select 多路复用未命名的管道和其他文件描述符
- 提升 ASIO 绑定:错误的文件描述符
- 使用文件描述符移动对象
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- read() 上的不同行为取决于写入不可写内存时表示文件、匿名管道或套接字的文件描述符
- 我可以在不使用 FIOCANCEL 的情况下关闭 VxWorks 中的文件描述符吗?
- 将 Boost Asio 与 ZeroMQ 集成,文件描述符错误?