Si fork con el propósito de llamar a un exec función, puede usar fcntl con FD_CLOEXEC tener el descriptor de archivo cerrado una vez que exec :
int fd = open(...);
fcntl(fd, F_SETFD, FD_CLOEXEC);
 
 Tal descriptor de archivo sobrevivirá a un fork pero no funciones del exec familia.
No. Ciérrelos usted mismo, ya que sabe cuáles deben cerrarse.