Si vous fork dans le but d'appeler un exec fonction, vous pouvez utiliser fcntl avec FD_CLOEXEC pour que le descripteur de fichier soit fermé une fois que vous exec :
int fd = open(...);
fcntl(fd, F_SETFD, FD_CLOEXEC);
Un tel descripteur de fichier survivra à un fork mais pas les fonctions du exec famille.
Non. Fermez-les vous-même, puisque vous savez lesquels doivent être fermés.