c

¿Qué hace la marca FD_CLOEXEC fcntl()?



(2)

Al igual que:

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

Aunque he leído man fcntl , no puedo entender lo que hace.


Establece el indicador close-on-exec para el descriptor de archivo, lo que hace que el descriptor de archivo se cierre automáticamente (y atómicamente) cuando cualquiera de las funciones exec -family se realiza correctamente.

También prueba el valor de retorno para ver si la operación falló, lo cual es inútil si el descriptor de archivo es válido, ya que no hay ninguna condición bajo la cual esta operación falle en un descriptor de archivo válido.


Marca el descriptor del archivo para que se close() d automáticamente cuando el proceso o cualquier hijo al que fork() s llame a una de las familias de funciones exec*() . Esto es útil para evitar filtrar sus descriptores de archivos a programas aleatorios ejecutados, por ejemplo system() por system() .