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);
./b가 exec 된다면 execl(); 밑의 코드는 실행되지 않습니다.
close-on-exec flag는 'exec 이 된 후에는(여기서는 ./b 프로세스) fd는 close 된 상태임' 을 보장하는 것입니다.
따라서 ./b 프로그램에서 fd를 검사해 보면 close 되어 있을 것입니다.
우리 모두 리얼리스트가 되자. 그러나 가슴에 이룰 수 없는 꿈을 가지자
댓글 달기