Что делает флаг FD CLOEXEC fcntl ()?


вот так:

if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...

хотя я читал man fcntl, Я не могу понять, что он делает.

2 62

2 ответа:

задает close-on-exec флаг для файлового дескриптора, который заставляет файловый дескриптор автоматически (и атомарно) закрываться, когда любой из exec-семейные функции успеха.

Он также проверяет возвращаемое значение, чтобы увидеть, если операция не удалась, что довольно бесполезно, если дескриптор файла является допустимым, так как нет условия, при котором эта операция должна завершиться с ошибкой на допустимом дескрипторе файла.

он помечает файловый дескриптор так, что он будет close()D автоматически, когда процесс или любые дети это fork() s вызывает один из exec*() семейство функций. Это полезно для предотвращения утечки ваших файловых дескрипторов в случайные программы, например system().