Как определить, используют ли другие процессы дескриптор файла? - PullRequest
0 голосов
/ 10 июля 2011

Я пишу приложение на C ++ для среды linux, которая будет работать в многопроцессорной настройке (то есть программа вызывает fork ()). Как часть приложения я создаю некоторые файловые дескрипторы (в данном случае сокеты), мне интересно, возможно ли, чтобы программа определяла, сколько других процессов имеют этот файловый дескриптор открытым. В этом случае я хочу выполнить специальные действия перед закрытием последней копии дескриптора файла.

Я знаю, что реализация close для файловых дескрипторов, таких как 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;
}

1 Ответ

1 голос
/ 10 июля 2011

Если вы пишете main (), который порождает дочерние процессы, вам следует дождаться завершения этих дочерних процессов.

...