[linux] External Process Handling

spring·2020년 11월 9일
0

1. 외부 프로세스의 결과값 받아오기

popen으로 깔끔하게 해결할 수 있다.

char* cmd="uname";
FILE* fp=popen(cmd,"r");
if(fp==NULL)return;
std::string buffer;
char c;
while(fread(&c,1,1,fp)==1 && c!=EOF) {
    buffer.push_back(c);
}
std::cout << buffer << std::endl;
pclose(fp);

buffer overflow 를 유의해야 하므로, 미리 버퍼의 크기를 구하면 좋겠지만 이건 파일이 아니므로 구할 수 없다. (ftell함수가 동작안함)
하나씩 읽어 EOF가 나올때 까지 읽는 수 밖에 없고 rewind 와 같은 함수로 돌아갈수도 없다.

호출하는 프로세스의 반환값을 알고 싶다면 아래의 매크로를 이용하여 구할 수 있다.

int ret=WEXITSTATUS(pclose(fp));

2. 외부 프로세스 제어하기

http://channelofchaos.tistory.com/55
https://stackoverflow.com/questions/22245237/execlp-redirect-stdin-in-c
https://stackoverflow.com/questions/6493674/redirecting-the-execlp-output-to-a-file

References

profile
Researcher & Developer @ NAVER Corp | Designer @ HONGIK Univ.

0개의 댓글