fcntl()함수로 exec와 개방된 화일 관계에 대해서 알고싶어요 ㅜ

skylandi의 이미지

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	int fd,res;
	fd=open("41.c",O_RDONLY);
	printf("파일 기술자:%d\n",fd);

	fcntl(fd,F_SETFD,1);
//	fcntl(fd,F_SETFD,0);
	execl("./b","b",(char *)0);
	res=fcntl(fd,F_GETFD,0);
	printf("상태값:%d 파일기술자:%d\n",res,fd);
	return 0;
}

소스를 보시면 fcntl(fd,F_SETFD,1); 로 close-on-exec 플래그를 on으로 설정해서 파일 기술자를 유지 한다고 하던데 아닌가요...
책에서 이케 설명을 해서 한번 만들어 봤는데 영 아닌거 같아서 이케 올립니다.
stoneshim의 이미지

   fcntl(fd,F_SETFD,1); 
//   fcntl(fd,F_SETFD,0); 
   execl("./b","b",(char *)0); 
   res=fcntl(fd,F_GETFD,0); 
   printf("상태값:%d 파일기술자:%d\n",res,fd); 

./b가 exec 된다면 execl(); 밑의 코드는 실행되지 않습니다.

close-on-exec flag는 'exec 이 된 후에는(여기서는 ./b 프로세스) fd는 close 된 상태임' 을 보장하는 것입니다.

따라서 ./b 프로그램에서 fd를 검사해 보면 close 되어 있을 것입니다.

우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자