open("/dev/null") 로 dup2 를 하는 코드가 있습니다.
글쓴이: maze / 작성시간: 목, 2014/01/09 - 3:11오후
fnull = open("/dev/null", O_RDWR);
if (fnull >= 0)
{
dup2(fnull, STDIN_FILENO);
dup2(fnull, STDOUT_FILENO);
dup2(fnull, STDERR_FILENO);
close(fnull);
}
fork() 동작시 해주는 부분인데..
왜 저렇게 했을까요..? 0, 1, 2 번 fd 가 뭔지는 알고있습니다.. 데몬이 되면 필요없는 fd 죠..
그냥 close(stdin) 해준거랑 차이가 뭘까요..?
궁금합니다.
Forums:
open() 때 비어있는 가장 작은 fd 부터
open() 때 비어있는 가장 작은 fd 부터 할당됩니다.
close() 만 해버렸으면 0 부터 할당되기 시작하죠.
이것 자체는 아무 문제가 없는데, 두가지가 위험합니다.
어딘가에서 printf() 나 fprintf() 등을 사용할 경우.
코더들이 작성한 코드들을 보면 10중 8,9가
식의 말기화(?)를 사용합니다.
감사합니다.
그럼 fd >= 0 조건을 쓴다면 문제가 없으려나요.. 음..
각각의 경우에 대한 코드 테스트를 해보고 확인했습니다.
/dev/null 를 사용한 경우는.. fd 가 4부터 리턴이 되네요..
감사합니다. ㅎㅎ
음 ..
데몬의 디버깅 메시지를 printf 등으로 찍어 놓은 애들 디버깅할 때 가끔 써먹죠.
그냥 /dev/null 로 redirect 해 뒀다가, 필요하면 시그널 날려서 파일로 redirect 해서 분석..
별도로 로그 파일을 사용하지 않는(못하는) 데몬들, 재시작 안하고 라이브로 분석할 때 쓸만합니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
유용한 정보 감사드립니다.
이곳.. 자주 오고 싶어졌습니다..
감사합니다..
댓글 달기