1 / 8

리눅스 시스템 프로그래밍 예제 6-11, 12, 13

리눅스 시스템 프로그래밍 예제 6-11, 12, 13. 컴퓨터 정보학부 2003242103 이종국. Exec 함수의 정의. exec 뒤에 붙는 머리글자를 보면 함수의 문법을 알 수 있습니다 . 정리하면 .. l: 인자를 list 형태로 전달 (const char *arg, ...) v: 인자를 vector 형태로 전달 (char *const argv[]) e: 환경변수를 전달 (char *const envp[]) p: 실행파일을 PATH 환경변수가 가리키는 디렉토리에

travis
Download Presentation

리눅스 시스템 프로그래밍 예제 6-11, 12, 13

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 리눅스 시스템 프로그래밍예제 6-11, 12, 13 컴퓨터 정보학부 2003242103 이종국

  2. Exec함수의 정의 exec 뒤에 붙는 머리글자를 보면 함수의 문법을 알 수 있습니다. 정리하면.. l: 인자를 list 형태로 전달 (const char *arg, ...) v: 인자를 vector 형태로 전달 (char *const argv[]) e: 환경변수를 전달 (char *const envp[]) p: 실행파일을 PATH 환경변수가 가리키는 디렉토리에 서 검색(p자가 안 붙은 함수에서는 전체 경로를 직접 지정)

  3. 함수 정의 • execve(const char *path(실행할 파일경로명), char *const argv[](인자), char envp[](실행파일이 수행되는 환경)); • execle(const char *path(실행할 파일경로명), char *const arg,...(인자), char * const envp[](실행파일이 수행되는 환경));

  4. 함수 정의 • execvp(const char *filename(실행파일명), char *const argv[](실행파일과 같이 수행할 인자)); ▶여기서 실행파일명에서는 이름만을 넣는다. • execlp(const char *filename(실행파일명), const char *arg,...(실행파일과 같이 수행할 인자));

  5. 함수의 차이점 • 두번째 인자에 차이점이 있으며, execle(), execvp()는 실행 파일에 넘겨질 인자를 나열하지만, execve(), execvp()는 인자들을 포인터 배열에 저장한 후 배열 이름만 기입한다는 차이점이 있다.

  6. 소스(6-11) #include <stdio.h> main() { static char *nargv[] = { "ex6-8", "parm1", "parm2", "parm3", (char *) 0}; static char *nenv[] = { "NAME=value", "nextname=nextvalue", "HOME=/xyz", (char *) 0}; printf("this is the original porgram\n"); execve("./ex6-8",nargv,nenv); /* execle("./ex6-8", "newpgm", "parm1", "parm2", "parm3",(char *) 0)*/ perror("This line should never get printed\n"); } Exeve 시스템 호출 함수를 이용 하여 ex6-8프로그램을 실행시킨다. 마지막 매개변수 nenv가 추가되었다. Execve 호출이 성공적으로 이루어지면 결코 수행되지 않는다. Execve와 같은 결과를 얻는다. 그러나 execle 함수의 사용형태는 인수 (argument)를 모두 나열하여 매개 변수를 사용하는 점이 다르다.

  7. 소스(6-12) #include <stdio.h> main() { static char *nargv[] = { "ex6-8", "parm1", "parm2", "parm3", (char *) 0}; printf("this is the original porgram\n"); execvp("ex6-8",nargv); /* execlp("./ex6-8", "ex6-8", "parm1", "parm2", "parm3",(char *) 0)*/ perror("This line should never get printed\n"); } Execvp 함수는 수행시킬 프로그램의 경로(path)는 환경 변수 PATH를 참조 하며, 첫번째 매개변수는 프로그램 이름이고, 두번째 매개 변수는 인수 (argument)리스트이다. Execvp와 같은 결과를 얻을 수 있다. 그러나 사용 형태가 execlp는 인수들을 모두 나열하는 것이 다르다. 예제 6-11과 마찬가지로 위 함수가 성공적으로 수행되면 본 라인은 결코 수행되지 않는다.

  8. 소스(6-13) Fork함수를 호출하여 반환값이 0이면 자식 프로세스이다 main() { int fork(); if(fork() == 0) { execl("/bin/echo", "echo","this is","message one",(char *) 0); perror("exec one failed"); exit(1); } if(fork() == 0) { execl("/bin/echo","echo","this is","message two",(char *) 0); perror("exec two failed"); exit(2); } if(fork() == 0) { execl("/bin/echo","echo","this is","message three",(char *) 0); perror("exec three failed"); exit(3); } printf("Parent program ending\n"); } Execl함수는 /bin/echo명령어를 수행시킨다. 이때 “this is”와 “message one”인수를 전달한다. Execl함수 호출이 실패하였을때만 수행된다. Exec 시스템호출 함수를 이용하여 다른프로그램을 실행시키면 본래의 프로그램은 실행이 중단되는 결과를 가져온다. 하지만 중단없이 계속작업하려면 fork()함수를 이용하여 자식프로세스가 exec함수를 호출하게 만들면 부모프로세서의 중단없이 작업을 계속 수행할 수 있다.

More Related