본문 바로가기

Programming60

system()과 execl()의 차이 system()과 execl() 둘다 명령을 실행하는 함수 인데 무슨 차이가 있을까요? 일단 표면 적으로는 ls -al 같은 명령을 쓸때 system함수의 경우에는 system("ls -al") 처럼 사용하고 execl함수는 execl("/bin/ls", "ls", "-al", 0) 처럼 옵션을 다른 인자로 넘겨줘야 한다는게 차이가 있습니다. 그리고 한가지 더 보면 -> -> 위와 같이 system함수의 경우는 ls 명령어 실행 후 원래 프로그램으로 돌아와서 남아 있는 printf를 호출 합니다. 그런데 execl함수는 ls 명령어 실행 후 printf가 호출 되는 것을 볼 수 없습니다. ( execl를 호출 했을 때는 현재 프로그램이 /bin/ls라는 프로그램으로 덮어 씌워지는 것입니다. ) 따라서 e.. 2012. 5. 16.
system함수, exec계열의 함수(execl, execv, execle, execve, execlp, execvp) 먼저 system함수를 알아 보겠습니다. 원형은 int system(const char* command)이며 command에 해당하는 명령어를 수행하는 함수입니다. (반환형이 int인데 성공시 0을 반환, 실패시 -1을 리턴합니다.) system함수로 ls명령어를 실행해본 화면입니다. -> /bin/ls처럼 절대 경로말고 ls로만 입력해도 ls가 실행됩니다. (환경변수 PATH를 이용하는 듯..) 그리고 옵션을 사용할 때는 단순히 "/bin/ls -a"와 같이 해주면 됩니다. -> 이제 exec계열의 함수(execl, execv, execle, execve, execlp, execvp)에 대해서 알아 보겠습니다. 아래 그림에서 exec계열의 함수에 대해 자세히 설명해줍니다. 위의 exec함수들을 보면 e.. 2012. 5. 16.
프로그램 종료2 - atexit(), _exit() atexit() 원형 : int atexit(atexit_t func) 헤더 파일 : stdlib.h 리턴 값 : 성공시 0 반환, 실패시 0 이외의 값 리턴 -> 프로그램이 종료되거나 exit()함수에 의해 종료될때 atexit()에 등록한 함수를 실행한다. exit(0)없이 프로그램이 종료되도 test()함수는 실행된다. 그리고 atexit()에 나중에 등록한 함수가 먼저 실행된다. ex) _exit() 원형 : void _exit(int status) 헤더 파일 : stdlib.h -> exit()와 다르게 열려 있는 파일을 닫는다거나 탈출 함수를 호출하지 않고 종료한다. _exit()를 했을때는 test()함수가 실행되지 않는다. 2012. 5. 3.
프로그램 종료 - assert(), exit(), abort() assert() 원형 : void assert(int test) 헤더 파일 : assert.h -> assert안의 값이 false일 경우 프로그램을 비정상적으로 종료 exit() 원형 : void exit(int status) 헤더 파일 : stdlib.h -> EXIT_SUCCESS : 정상적인 종료 (0) EXIT_FAILURE : 비정상적인 종료 (1) abort() 원형 : void abort(void) 헤더 파일 : stdlib.h -> 프로그램을 비정상적으로 종료한다. 2012. 5. 2.