검색 여닫기
검색
메뉴 여닫기
543
253
4
2.1천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Pipe 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Pipe
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
[[분류: 스레드/프로세스]] == 개요 == Pipe를 통해서 연결된 프로세스 사이에서 통신하기 위한 방식이다. Data의 송수신에 있어서 파일 크기의 제약이 없는 장점이 있다. 또한 자동적으로 Synchronization이 이루어진다. 파이프는 Unnamed Pipe와 Named Pipe로 구분된다. 파이프는 유닉스 초창기부터 IPC를 위해서 이용된 방식이다. 파이프를 쉽게 생각하자면 하나의 큰 파일로 이루어진 버퍼라고 생각하면 된다. UNIX Shell에서 파이프는 | 로 표현된다. : ls -alg | more : pic parer.ms | tbl | eqn | ditroff -ms == 시스템 콜 == C 프로그래밍 언어로 파이프라인을 만드는 것은 간단한 쉘 예제보다는 많은 것을 포함한다. C로 간단한 파이프를 만들기 위해 pipe() 시스템 호출을 사용한다. 이것은 두 정수의 배열인 한개의 아규먼트(argument)를 가지며, 성공하면 배열은 파이프 라인을 위해 사용되는 새로운 두개의 파일 식별자를 갖는다. 파이프를 만들고 난 후, 프로세스는 전통적으로 새로운 프로세스를 낳는다. <syntaxhighlight lang=c> SYSTEM CALL: pipe(); PROTOTYPE: int pipe(int fd[2]); RETURNS: 성공시 0 -1 on error: errno = EMFILE (자유로운 식별자가 없다) EMFILE (시스템 파일 테이블이 다 찼다) EFAULT (fd 배열이 유효하지 않다) NOTES: fd[0]는 읽기를 위해 준비되고, fd[1]은 쓰기를 위해 준비된다. </syntaxhighlight> === 예시 === <syntaxhighlight lang=c> #include <stdio.h> #define READ 0 #define WRITE 1 char* phrase = "Stuff this in your pipe and smoke it"; main() { int fd[2], bytesRead; char message[100]; pipe(fd); if(fork()==0) //child { close(fd[READ]); write(fd[WRITE], phrase, strlen(phrase) + 1); close(fd[WRITE]); } else { close(fd[WRITE]); bytesRead = read(fd[READ], message,100); printf("Read %d : %s\n",bytesRead, message); close(fd[READ]); } } </syntaxhighlight>
Pipe
문서로 돌아갑니다.