close-on-exec flag
/*
* exercise8-7.c
*
* Created on: Nov 11, 2011
* Author: zhuhuang
*/
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
int main(void)
{
DIR *dir;
int filedes1, filedes2;
int fdflag1, fdflag2;
struct dirent *direntry;
filedes1 = open("/", O_RDONLY);
//file descriptor flag before calling opendir. it is off.
fdflag1 = fcntl(filedes1, F_GETFD);
if(fdflag1 & FD_CLOEXEC)
printf("filedes1: close-on-exec flag is onn");
else
printf("filedes1: close-on-exec flag is offn");
//See Page 234 on APUE2e, opendir function will set the close-on-exec flag for the descriptor filedes
dir = fdopendir(filedes1);
while((direntry = readdir(dir)) != NULL)
{
printf("%sn", direntry->d_name);
}
//file descriptor flag after calling opendir. it is on now.
fdflag1 = fcntl(filedes1, F_GETFD);
if(fdflag1 & FD_CLOEXEC)
printf("filedes1: close-on-exec flag is onn");
else
printf("filedes1: close-on-exec flag is offn");
//set close-on-exec flag operation on filedes1 won't affect filedes2
filedes2 = open("/", O_RDONLY);
fdflag2 = fcntl(filedes2, F_GETFD);
if(fdflag2 & FD_CLOEXEC)
printf("filedes2: close-on-exec flag is onn");
else
printf("filedes2: close-on-exec flag is offn");
}