Я пишу приложение на 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;
}