프로세스와 프로세스 사이에 파이프를 통해서 데이타가 이동을한다.
읽기용으로 쓸건지 라이트용으로 쓸건지 알수가 있다.
파일 포인터의 구조체가 반환된다는것은
파일 관련 함수를 사용할수 있다는 의미인다.
plcose는 popen으로 연것을 닫을때 사용하는 함수이다.
25-7 예제
#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);
}
argv 1으로 들어간 프로세서를 실행하고 해당되는 프로세스의 출력이 파이프를 통해서
출력이된다 fgets함수를 통해서 버퍼로저장이된다.
argv에 ls가 들어갔다면 ls가 실행이되고 파이프안에 전달이 되고
fgets로 부터 데이터의 결과물을 받아서 fputs의 stdout으로 출력을 하고 있다.

=====================================================================================
25-8
#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);
}


      c 언어  |  2007. 9. 17. 11:44



sokoban's Blog is powered by Daum & Tattertools