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