디바이스가 close가 안됩니다...???
글쓴이: 우주 / 작성시간: 화, 2006/03/14 - 11:05오후
어플리케이션 초기화 부분에서 아래와 같이 system펑션으로 neta.exe를 실행시켜 놓습니다.
system("/neta.exe &");
그리고 필요에 의해 비디오 디바이스를 close시키는데 디바이스 드라이버로 close가 전달이 안됩니다.
그래서 원인을 살펴보던 중 neta.exe를 실행시키지 않고 디바이스를 close해보니 그때는 close가 잘 됩니다.
이런 경우가 발생하는 이유나 해결책을 아시는 분 계신가요?
도움을 부탁드립니다.
Forums:
system() 실행시 열려
system() 실행시 부모 프로세스가 열어 둔 모든 파일 디스크립터가 자식 프로세스에게 복사됩니다. neta.exe도 디바이스 파일을 열고 있게 되니 부모 어플리케이션이 죽은 후에도 디바이스가 닫히지 않는 것입니다. system()을 실행하기 전에 stdin, stdout, stderr 정도를 제외한 파일 디스크립터에 대해 fcntl(F_SETFD)로 FD_CLOEXEC 플래그를 설정해 주시는 건 어떨까요? man fcntl((2)에 관련 내용이 있습니다.
----
$PWD `date`
$PWD `date`
고맙습니다.
딱 정답이네요. 덕분에 헤매던 문제를 풀었습니다.
감사드립니다.
댓글 달기