'programming'에 해당되는 글 387건

  1. 2011.08.10 popen

popen

programming/C_C++ 2011. 8. 10. 18:07
반응형

 


URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/popen


### popen(2)

 

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

1.1절. 사용법


#include <stdio.h>

FILE *popen(const char *command, const char *type);
int pclose();

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

1.2절. 설명

popen 은 command 를 shell을 가동시켜서 열고 pipe(2)로 연결한다.
pipe 는 기본적으로 단방향으로만 정의 되어 있음으로, 읽기전용 혹은 쓰기전용 으로만 열수 있으며, type 로 정의된다.
popen 은 command 를 실행시키고 pip 연결을 위해서 내부적으로 fork() 와 pipe() 를 사용한다.

command 는 실행쉘인 /bin/sh 에 -c 옵션을 사용하여서 전달되게 된다.

pclose(2) 함수는 종료되는 관련 프로세스를 기다리며 wait(2) 가 반환하는 것처럼 명령어의 종료 상태를 반환한다.


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

1.3절. 반환값

popen 은 실패할경우 NULL 을 반환한다.
pclose 는 종료되는 관련 프로세스를 기다리며 명령어의 종료 상태를 반환한다.
에러가 발견될경우 -1 을 리턴한다.


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

1.4절. 에러

popen 함수는 메모리 할당이 실패한다면, errno 를 설정하지 않는다.
fork()나 pipe()에서 실패했을경우 적당한 errno 를 설정한다.

pclose()는 자식의 상태를 얻을수 없을경우 errno 를 ECHILD 로 설정한다.


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

1.5절. 예제

 

 

#include <stdio.h>

#define MAXLINE 256

int main()
{
    FILE *fp;
    int state;

    char buff[MAXLINE];
    fp = popen("ls -al", "r");
    if (fp == NULL)
    {
        perror("erro : ");
        exit(0);
    }

    while(fgets(buff, MAXLINE, fp) != NULL)
    {
        printf("%s", buff);
    }

    state = pclose(fp);
    printf("state is %d\n", state);
}

 

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

 

 


popen 함수는 system과 다른 점이 명령 수행 결과를 String으로 가져올 수 있다는 것이다.
 
system() 함수는 프로세스 생성의 성공 여부에 대한 결과만 반환 한다.
 

 


 

반응형
Posted by 공간사랑
,