참고로 개발환경은 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
그럴 경우
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/
에서 더 보실 수 있습니다.
댓글 없음:
댓글 쓰기