2012. 7. 13. 16:31

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
Posted by 몰라욧