system 함수의 안정성
글쓴이: devscott / 작성시간: 금, 2010/04/23 - 11:06오전
안녕하세요
저희 고객사에서 개발한 어플리케이션이 있는데
void CGameCommon::makeDir( const char * path ) {
char buff[1024];
sprintf(buff,"mkdir -p %s",path);
system(buff);
}
이런 함수를 이용하여 디렉토리를 생성하고 잇습니다.
문제는 한번 system 호출에서 signal 11, segmentation fault 를
냈다며
시스템 os 문제를 제기 하고 있습니다.
( system 함수는 os측의 처리를 부르기위하여 어플리케이션으로 부터 호출되었기때문...)
경험에 의하면 system 함수를 이용하는것은
좋은 개발내용은 아닌듯합니다.
자주 문제가 생겼던 경험도 있는데
문제는 딱히 system 함수를 쓰면 안된다는
이론적인 내용을 전달할 배경지식이 없어서
조언 드립니다.
system 함수대신 디렉토리 생성 함수를 사용하라는
배경 지식에 대해서 한말씀 부탁드립니다.
미리 감사드립니다.
Forums:
system 함수를
system 함수를 이용하여 mkdir 을 하게 될 경우 mkdir 명령이 /bin/mkdir 이라고 보장할 수 없는 문제가 있겠네요. 함수를 쓰는것도 최악의 경우엔 보장할 수 없긴 마찬가지긴 하지만 system보다 는 더 안전하네요.
외부 명령은 가능하면 피하고 제품안에 명령을 호출해야 하는 경우엔..fork/execl/waitpid 를 사용해서 system처럼 블락되어 제어권을 잃는 경우는 피하고... 가능하면 절대 경로로 명령을 실행해주는 것이 좋을 것 같네요.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
...
Dialog box: 설치 디렉토리를 입력하세요
사용자: dummy; sudo rm -Rf /
프로그램: makeDir("dummy; sudo rm -Rf /");
상황은 시궁창으로...
system 함수를
system 함수를 사용하면 앞서 지적된 보안 외에도 문제가 생길 수 있습니다.
memory pressure가 심한 상황인 경우 무거운 프로세스 내에서 system()을
실행하면 죽어버리는 경우가 가능합니다. 그런 의미에서 fork/exec도 비슷한 문제를 가지고 있을 것 같네요.
직접 구현하시던지, 아니면 다른 방법을 사용하시는게 좋을 듯 합니다.
댓글 달기