fcntl()함수로 exec와 개방된 화일 관계에 대해서 알고싶어요 ㅜ
글쓴이: skylandi / 작성시간: 금, 2003/03/28 - 4:37오전
#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으로 설정해서 파일 기술자를 유지 한다고 하던데 아닌가요...
책에서 이케 설명을 해서 한번 만들어 봤는데 영 아닌거 같아서 이케 올립니다.
Forums:


[code:1] fcntl(fd,F_SETFD,1);
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 되어 있을 것입니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
댓글 달기