Linux Program에서 표준 출력 장치로 출력한 내용을 다른 프로그램의 입력으로 전송할 수 있습니다. 이러한 것을 파이프라 합니다.
예를 들어 'ls -a /root' 라는 명령을 실행할 경우, system() 함수를 이용하여 해당 동작을 수행가능합니다. 하지만, system() 함수의 경우 해당 명령어의 성공/실패를 확인 가능하지만, 'ls -a /root'의 결과인 디렉토리내 파일 리스트는 확인이 불가능합니다.
즉, system()을 이용한 다면 다음과 같은 과정을 거쳐야합니다.
system("ls -a /root > ls_result.txt"); fd = fopen("a.txt", "r"); ... |
상기와 같이 'ls -a /root'의 실행 결과를 파일로 저장한 후, 해당 파일을 열어서 해당 동작을 확인해야하는 번거로움이 있습니다.
popen()의 경우 상기 동작을 한번에 수행이 가능합니다.
함수 원형 : FILE *popen(const char *command, const char *type);
TYPE 인자 :
- 'r' : 파이프를 통한 입력
- 'w' : 파이프를 통한 출력
return 값 :
- 실패 : NULL
- 성공 : 파일 포인터
사용 방법 예제는 다음과 같습니다.
#include <stdio.h> int main( void) { char buff[1024]; FILE *fp; fp = popen( "route", "r"); if ( NULL == fp) { perror( "popen() 실패"); return -1; } while( read(fp, buff, BUFF_SIZE) != EOF ) printf( "%s", buff); pclose( fp); return 0; } |
위와 같이 popen() 함수를 사용하게 되면 표준 출력/표준 입력으로 동작되는 결과를 파이프를 이용하여 처리할 수 있습니다.
'Development > C/C++' 카테고리의 다른 글
Linux C/C++ Error Code 확인방법 (0) | 2015.10.30 |
---|---|
Network - Socket - Get Local IP Address (0) | 2015.10.27 |