본문 바로가기

Development/C/C++

popen()





 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