socketpair
OS/리눅스 & 유닉스 2011. 12. 27. 19:051장. socketpair(2)
연결된 소켓 쌍을 생성한다.
1.1절. 사용법
#include <sys/types.h> #include <sys/socket.h> int socketpair(int d, int type, int protocol, int sv[2]); |
1.2절. 설명
socketpair()은 옵션으로 d영역(domain)을 가지며 protocol프로토콜을 사용하는 type의 소켓 쌍을 생성한다. 생성된 소켓 쌍은 sv를 통해서 넘어온다. 두개의 소켓은 서로 구별할 수 없다.
보통 부모 자식 프로세스간 내부 통신(IPC)를 위해서 사용한다. 소켓이므로 양방향(읽고/쓰기) 통신이 가능하다.
1.4절. 에러
- EMFILE
너무 많은 파일이 열려있어서 더이상 소켓을 생성할 수 없다.
- EAFNOSUPPORT
지정한 주소 지정방식이 지원되지 않는다.
- EPROTONOSUPPORT
지정된 프로토콜이 지원되지 않는다.
- EFAULT
주소 ev가 프로세스 주소 공간의 유효한 부분을 가리키지 않는다.
1.5절. 예제
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> int main() { int pid; char buf[256]; int fd; int sv[2]; int num = 0; socketpair(AF_UNIX, SOCK_STREAM, AF_LOCAL, sv); pid = fork(); if (pid == 0) { dup2(sv[0], 0); close(sv[1]); close(sv[0]); execl("./pipe_cl", "pipe_cl", NULL); } else if (pid > 0) { close(sv[0]); while(1) { write(sv[1], (void *)&num, 4); printf("write %d\n", num); read(sv[1], (void *)&num, 4); printf("read %d\n", num); } } } |
#include <unistd.h> #include <stdio.h> int main() { int num; while(1) { read(0, (void *)&num, 4); num++; write(0, (void *)&num, 4); sleep(1); } } |
'OS > 리눅스 & 유닉스' 카테고리의 다른 글
유닉스 itoa 구현 (0) | 2011.12.30 |
---|---|
htonl() htons() ntohl() ntohs() (0) | 2011.12.28 |
파일 디스크립터 (0) | 2011.12.27 |
perror (0) | 2011.12.23 |
write (0) | 2011.12.23 |