일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Wibro
- 사요
- SWT
- CDMA
- 차트쇼쇼쇼
- ETF
- itmusic
- 모던음악만만세
- HSDPA
- 페이스북
- VoIP
- 공정위
- "명탐정 코난"
- 자바
- 이지형
- Java
- 라디오
- 그녀가말했다
- 러시아
- 김장훈
- 민동현
- 유희열의라디오천국
- USIM
- 민동현의토요명화
- 퀄컴
- 위피
- 김장훈의who
- EV-DO Rev. B
- brew
- 한국의 기획자들
- Today
- Total
zyint's blog
[2] 조인시위키: pipe 본문
1장 pipe(2)
1.1절. 사용법
#include <unistd.h> |
1.2절. 설명
pipe 를 이용하면 2개의 파일 지시자를 생성할수 있다. 2개가 생성되는 이유는 읽기전용과 쓰기전용의 파이프를 생성하기 위함이다. filedes[0] 은 읽기 전용, filedes[1] 은 쓰기전용의 파이프로 사용된다.
이들 파이프는 주로 부모프로세스와 자식프로세스간의 통신을 위한 목적으로 사용된다.
1.3절. 반환값
성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.
1.4절. 에러
EMFILE
너무 많은 파일 디스크립터가 프로세스에 의해 사용되고 있다.
ENFILE
시스템 파일 테이블이 꽉찼을경우
EFAULT
filedes 가 유효하지 못하다.
ENOBUFS
시스템에 연산을 위해서 이용할수 있는 자원이 부족할때
1.5절. 예제
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int n, fd[2];
char buf[255];
int pid;
if (pipe(fd) < 0)
{
perror("pipe error : ");
exit(0);
}
// 파이프를 생성한다.
if ((pid = fork()) < 0)
{
perror("fork error : ");
exit(0);
}
// 만약 자식프로세스라면 파이프에 자신의 PID 정보를 쓴다.
else if (pid == 0)
{
close(fd[0]);
while(1)
{
memset(buf, 0x00, 255);
sprintf(buf, "Hello : %d\n", getpid());
write(fd[1], buf, strlen(buf));
sleep(1);
}
}
// 만약 부모프로세스라면 파이프에서 데이타를 읽어들인다.
else
{
close(fd[1]);
while(1)
{
memset(buf, 0x00, 255);
n = read(fd[0], buf, 255);
fprintf(stderr, "%s", buf);
}
}
}
위 프로그램은 파이프를 생성한후 만들어진 파이프를 통해서 자식과 부모가 서로 통신하는 예제이다. fork 하기전에 pipe 를 만들면 된다. fork() 는 특성상 열린파일지시자를 자식에게 상속하기 때문이다.
원문
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/pipe
이 글은 스프링노트에서 작성되었습니다.