파이프 - 해당되는 글 2건

#include <stdio.h>
#include <unistd.h>
#define SIZE 4

main()
{
    char *arg[3] = {"abc", "def", "ghi"};
    char buffer[SIZE];
    int pipes[2], i;

    /* 파이프 생성 */
    if(pipe(pipes) == -1) {
       perror("pipe failed");
       exit(1);
    }

    /* 자식 프로세스를 생성하고 부모 프로세스는 */
    if(fork()) {
       for(i=0; i<3; i++) {
          /* 파이프에 arg[i]를 쓰기 */
          write(pipes[1], arg[i], SIZE);
          printf("parent process write to pipe: %s\n", arg[i]);
       }
    /* 자식 프로세스는 */
    } else {
       for(i=0; i<3; i++) {
          /* 파이프로부터 읽기 */
          read(pipes[0], buffer, SIZE);
          printf("child process read from pipe: %s\n", buffer);
       }
    }
    exit(0);
}

//자식프로세르를 만들어서 부모프로세스와의 정보를 교환
25-11도 그런예제
코드영역은 공유를 하고, 전역 변수같은 부분은 공유할 부분은 공유하고 복사할부분은 복사
변수를 복사를 한다.

      c 언어  |  2007. 9. 17. 12:09




프로세스와 프로세스 사이에 파이프를 통해서 데이타가 이동을한다.
읽기용으로 쓸건지 라이트용으로 쓸건지 알수가 있다.
파일 포인터의 구조체가 반환된다는것은
파일 관련 함수를 사용할수 있다는 의미인다.
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