2010년 4월 29일 목요일

system, popen 그리고 iwconfig, stderr, stdout

참고로 개발환경은 linux입니다. 윈도우쪽은 테스트해보지 않았습니다.

 

일반적으로 c 로 프로그래밍을 할 때 다른 프로그램을 실행시킬 때 system 함수를 사용합니다.

 

system("ls –al");

 

처럼 말이죠.

 

그런데 결과내용을 프로그램에서 사용해야 할 경우가 있습니다.

 

그럴경우 일반적으로 많이 사용하는 방법은

 

system("ls –al > output.txt");

 

처럼 output.txt에다가 결과를 저장해 두고 그 내용을 읽어 오는 방법을 사용하더군요.

 

하지만 여기서 좀 더 나아가면 popen 이라는 함수를 발견할 수 있습니다.

File* fp;

char line[100];

fp = popen("ls –al");

while (fgets(line, 100, fp) != NULL)

    printf("%s", line);

처럼 말이죠.

 

하지만

popen("iwconfig");

를 해보니 원하는대로 작동을 안하더군요 –_-; 결과가 출력은 되지만 결과를 변수에 집어넣고 사용할 수가 없었습니다. 즉 위의 코드의 while문은 그냥 무시 된다는 말이죠.

구글링을 해 보니 iwconfig 결과가 stdout이 아니고 stderr로 들어가고 있다는 글을 발견하였습니다.

참고 : iwconfig sends its normal output to stderr not stdout

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=420377

그럴 경우

popen("iwconfig 2>&1");

을 해 주어야 된다는 군요. 2>&1은 stderr 을 stdout으로 바꿔주는 역할을 한다고 합니다.

자세한건

참고 : What does "> /dev/null 2>&1" mean?

http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

에서 더 보실 수 있습니다.

댓글 없음:

댓글 쓰기