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




sigprocmask() 블록
.                                            
.    <-- 중간에 SIGINT시그널이 들어왔다.
.
.
sigprocmask()해제
pause();
블럭을 해제하면
시그널이 들어오면 포즈 이후에  시그널이 중간에 들어온게 있으니까.
포즈에서 프로그램이 중단되지 않고 바로 밑에 프로그램이 실행된다고 생각하지만
실제로는
블록된공간에서 시그널이 들어오면 시그널 바로 처리하고 PAUSE가 실행된다.
그리고 그다음 시그널을 오기를 기다리고 있다가 시그널이 들어오면 실행이된다.

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




#include <stdio.h>
#include <unistd.h>
#define MAX 100

main()
{
    char buffer[MAX];
    int n;

    alarm(10);   /* 10초 후에 SIGALRM 시그널을 자신에게 보냄 */
    n=read(0, buffer, MAX);
    /* SIGALRM 시그널을 받기 전에 실행하면 SIGALRM 시그널 요청은 취소 */
    alarm(0);
    write(1, buffer, n);
    exit(0);
}

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



sokoban's Blog is powered by Daum & Tattertools