argv[1]프로세스를 실행시키고 읽기용 파이프를 생성해 argv[1]프로세스의 실행 결과를 파이프를 통해 입력
받아 출력하는 프로그램
#include <stdio.h>
main(int argc, char *argv[])
{
FILE *read_fp;
char buffer[256];
/* argv[1] 프로세스를 실행하고 읽기용 파이프를 생성. read_fp는 파이프를 가리킴 */
if((read_fp = popen(argv[1], "r")) == NULL) {
perror("popen failed");
exit(1);
}
/* read_fp 파이프로부터 데이터를 입력받아 출력 */
while(fgets(buffer, sizeof(buffer), read_fp)) {
fputs(buffer, stdout);
}
/* read_fp 파이프를 닫음 */
pclose(read_fp);
exit(0);
}
[localhost@local]#a.out 'uname -a'
-------------------------------------------------------------------------------------------------------
두번째 인수를 'w'로 하여 popen을 실행한 후 argv[1]프로세스와 쓰기용 파이프를 생성하고 현재 프로세스에
서 파이프에 데이터를 쓰면 파이프를 통해 wc의 입력으로 전달되어 wc가 실행
#include <stdio.h>
main(int argc, char *argv[])
{
FILE *write_fp;
char buffer[256];
/* argv[1] 프로세스를 실행하고 쓰기용 파이프를 생성 */
if((write_fp = popen(argv[1], "w")) == NULL) {
perror("popen failed");
exit(1);
}
sprintf(buffer, "Linux C Programming\n");
/* buffer에 저장된 데이터를 파이프에 씀.
파이프에 쓴 데이터는 argv[1] 명령어의 입력으로 전달 */
fprintf(write_fp, buffer);
/* write_fp 파이프를 닫음 */
pclose(write_fp);
exit(0);
}
[localhost@local]# a.out wc
1 3 20
'EMBEDDED > SYSTEM Proc' 카테고리의 다른 글
[Network] mkfifo() 예제 (0) | 2012.07.13 |
---|---|
[Network] pipe() 예제 (0) | 2012.07.13 |
[Network] fcntl(), lockf() 예제 2 (0) | 2012.07.13 |
[Network] fcntl(), lockf() 예제 (0) | 2012.07.13 |
[Signal] sigpending(),sigsuspend() 예제 (0) | 2012.07.13 |