Se fork con lo scopo di chiamare un exec funzione, puoi usare fcntl con FD_CLOEXEC per avere il descrittore di file chiuso una volta che hai exec :
int fd = open(...);
fcntl(fd, F_SETFD, FD_CLOEXEC);
Tale descrittore di file sopravviverà a un fork ma non le funzioni del exec famiglia.
No. Chiudili tu stesso, poiché sai quali devono essere chiusi.