Dec
9
1장. popen(2)
프로세스 I/O
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 %dn", state);
}
출처 : joinc.co.kr
-------------------------------------------------------------------------------------------------
popen를 한쪽 방향이 아닌 "rw" 옵션을 사용해서 열기를 시도해서 30분동안 삽질하다가 겨우 발견한 해결방법..