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

标签 c++ sockets file-descriptor

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

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

编辑:我正在寻找一种无需访问主代码或 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;
}

最佳答案

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

关于c++ - 如何确定其他进程是否正在使用文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639504/

相关文章:

c++ - 如何从同一个函数返回不同的类型?

c++ - operator[] 在 C++ 中如何工作(重载用户定义的对象)?

java - 使用 datainput/-outputstream 通过 java 套接字发送 jpg-图像时出现问题

c - 从C中的文件描述符中检索文件名

c++ - SHOpenFolderAndSelectItems for explorer 替换程序

c++ - OpenCV中图像矩阵的子区域

c - 错误的文件描述符错误处理

php - PHP 可以异步使用套接字吗?

c - 使用 Select 进行多个套接字连接 C

c - 为什么文件描述符 1 和 2 可以在手动输入时读取,但在输入重定向时却不能读取?