2010-05-10 5 views
0

저는 운영체제에서 과정을 진행하고 있습니다. 우리는 파이프를 사용하여 프로세스간에 데이터를 전송하는 방법을 배우기로되어 있습니다.리눅스에서 C와 함께 파이프 사용

우리는 파이프를 사용하는 방법을 보여주는 간단한 코드를 받았지만 그것을 이해하는 데 어려움이 있습니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

main() 
{ 
     int pipefd [2], n; 
     char buff[100] ; 


     if(pipe(pipefd) < 0) 
     { 
     printf("can not create pipe \n"); 
     } 
     printf("read fd = %d, write fd = %d \n", pipefd[0], pipefd[1]); 
     if (write (pipefd[1],"hello world\n", 12)!= 12) 
     { 
     printf("pipe write error \n"); 
     } 
     if( (n = read (pipefd[0] , buff, sizeof (buff) )) <= 0) 
     { 
     printf("pipe read error \n"); 
     } 
     write (1, buff, n) ; 
exit (0); 
    } 

쓰기 기능은 무엇을 수행합니까? 그것은 파이프에 데이터를 보내고 또한 화면에 인쇄하는 것으로 보인다. (최소한 write 함수가 호출하는 것처럼 보인다.)

누구나 FIFO, FIFO, C와 같은 기본 Linux 명령과 같은 주제에 대해 배우기에 좋은 웹 사이트에 대한 제안 사항이 있습니까?

답변

3

이 함수는 파이프를 만들고 해당 endpoing 파일 설명자를 pipefd[0]pipefd[1]에 저장합니다. 한쪽 끝에 쓰는 것은 다른 쪽에서 읽거나 다른 쪽에서 읽을 수 있습니다. 첫 번째 write() 호출은 "hello world"를 pipefd[1]에 쓰고 read() 호출은 pipefd[0]에서 같은 데이터를 읽습니다. 그런 다음 두 번째 write() 호출은 데이터를 파일 설명자 1에 씁니다.이 파일은 기본적으로 STDOUT이므로 화면에 표시됩니다.

처음에는 파이프가 혼란 스러울 수 있습니다. 코드를 사용하여 더 많은 코드를 읽고 쓰면 훨씬 이해하기 쉬울 것입니다. W. Richard Stevens UNIX 환경의 고급 프로그래밍을 이해하기 좋은 책으로 권합니다. 기억 하듯이 좋은 코드 예제가 있습니다.

4

write()의 첫 번째 인수는 쓸 내용이 file descriptor입니다.

첫 번째 호출에서 코드는 파이프의 한쪽 끝 (pipefd[1])에 쓰고 있습니다. 두 번째 호출에서는 POSIX 호환 시스템에서 항상 표준 출력 (콘솔) 인 파일 설명자 1에 쓰고 있습니다. 파일 설명자 2는 표준 오류입니다.

5

프로그램에서 pipe(2) 호출을 통해 파이프를 만듭니다. 파이프는 읽기 용으로 열린 파일 디스크립터 (pipefd[0])와 쓰기 용으로 열린 파일 디스크립터 (pipefd[1])를 가지고있다. 이 프로그램은 먼저 파이프의 쓰기 끝에 "hello world \ n"을 쓴 다음 메시지의 읽기 파이프를 읽습니다. 메시지는 1


Beej's Guide to Unix Interprocess Communication 유닉스/리눅스 IPC에 대한 좋은 정보를 제공 기술자에게 파일로 write(2) 호출을 통해 콘솔 (표준 출력)에 기록된다. 다른 안내서 인 Beej's Guide to Network Programming에 대한 참조를 자주 볼 수 있습니다.

브루스 몰레이 (Bruce Molay)의 Understanding UNIX/LINUX Programming: A Guide to Theory and Practice은 유닉스/리눅스 시스템 프로그래밍에 관한 훌륭한 책이었습니다.

관련 문제