ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140619 (프로세스, 함수 포인터)
    부산IT학원/스마트컨트롤러 2014. 6. 19. 12:46

    84일차








    --------------

    프로세스

    --------------



    --- exit

    프로세스를 정상적으로 종료시키는 함수.


    #include <stdlib.h>


    void exit(int status);


    status : main 함수의 리턴값



    리턴값

    없음





    --- atexit

    프로그램을 정상적으로 종료할 때 실행될 함수를 등록한다.


    #include <stdlib.h>


    int atexit( void (*function)(void) );


    function : 등록할 함수 이름으로 인수르 값는 함수



    리턴값

    성공시

    0

    실패시

    -1




    --- wait

    자식 프로세스가 종료될 때까지 기다린다.


    #include <sys/types.h>

    #include <sys/wait.h>


    pid_t wait(int *status);


    status : 자식 프로세스가 종료될 때의 상태 정보.


    status 4byte 중에 하위 2byte만 사용하는데

    정상 종료시

    하위 2byte 중 상위 1byte에 return 값, exit(값)이 들어가고

    하위에는 0이 채워짐.


    비정상 종료시

    최하위 1byte에 프로세스를 종료시킨 시그널 번호가 저장된다.



    리턴값

    성공시

    종료된 자식 프로세스의 프로세스 ID


    실패시

    -1








    --- waitpid

    (특정) 자식 프로세스가 종료될 때까지 기다린다.


    #include <sys/types.h>

    #include <sys/wait.h>


    pid_t waitpid(pid_t pid, int *status, int options);


    pid : 종료를 기다리는 자식 프로세스의 ID

    -1을 주면 여러 자식중 하나라도 종료되기를 기다린다.

    0을 주면 호출한 프로세스의 그룹 ID와 같은 그룹 ID를 가지는 자식 프로세스가 종료되기를 기다린다.

    양수를 주면 그에 해당하는 자식 프로세스가 종료되기를 기다린다.


    status : 자식 프로세스가 종료될 때의 상태 정보

    options : 옵션

    WNOHANG 옵션을 주면 자식이 종료되지 않더라도 부모 프로세스는 계속 실행한다.

    0 옵션을 주면 wait과 동일하게 자식이 종료할 때가지 부모는 블록화된다.



    리턴값

    성공시

    종료된 자식 PID


    실패시

    -1








    --- 프로세스를 대체하는 함수들

    하나의 프로세스가 실행 중에 이 함수를 사용하여 다른 프로세스를 실행시키면

    다른 프로세스를 실행시키고 자신은 종료한다.


    #include <unistd.h>


    int execl( const char *path, const char *arg, ... , NULL);

    int execlp( const char *file, const char *arg, ... , NULL);

    int execle( const char *path, const char *arg , ... , char * const envp[]);

    int execv( const char *path, char *const argv[]);

    int execvp( const char *file, char *const argv[]);

    int execve( const char *path, char *const argv[], char *const envp[]);


    path : 실행될 파일의 경로와 이름

    file : 실행될 파일 이름

    arg : 실행될 인수들

    argv : 실행 파일의 인수 배열

    envp : 환경변수



    리턴값

    성공시

    없음


    실패시

    -1



     1 #include <stdio.h>

     2 #include <unistd.h>

     3

     4 int main()

     5 {

     6     printf("Running ls with execl\n");

     7

     8     if(-1 == (execl("/bin/ls", "ls", "-al", NULL)))

     9     {

    10         printf("error\n");

    11         return 0;

    12     }

    13

    14     printf("execl failed to run ls\n");

    15

    16     return 0;

    17 }














    --------------
    함수 포인터
    --------------




    --- 인자로 함수를 받을 때


    void test1 ( int (*fp)(const char *, ... ) )

    {

    fp("test\n");

    }


             : 인자 데이터 타입

    fp : 인자명






    --- 리턴값을 함수로 할 때


    int (* test2 (void) )(const char *, ... )

    {

    return printf;

    }


             : 리턴 타입






    --- 인자도 받고 리턴값도 함수


    int (* test3 (int (*fp)(const char *, ... )) )(const char *, ...)

    {

    return fp;

    }


             : 인자 데이터 타입

    fp : 인자명

             : 리턴 타입






    int main()

    {

    int (*fp)(const char *, ... );


    test1(printf);


    fp = test2;

    fp("test2\n");


    fp = test3(printf);

    fp("test3\n");


    return 0;

    }








Designed by Tistory.