Подтвердить что ты не робот

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

Так же:

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

Это позволит ОС автоматически закрыть дескриптор файла, если какой-либо другой процесс будет выполнять файл, который вы открываете (к файлу относится ваш fd). Это более полезно при написании сценариев и многопоточных программных сред.