mkfifo(const char *pathname, mode_t mode)
- 2개의 매개 변수가 필요하네.
- mkfifo(파이프사용할 파일명, 모드)
- 이걸로 FIFO 파일을 생성하면 이후로는 이파일을 가지고 파이프로 이동할 수 있다.
- 동일한 fd를 이용한다면 다른 프로세스에서도 메시지를 받을 수 있다.
- 주고 받는 양방향 불가.
수신하는 곳 #include#include #include #include #include #define FIFO_FILE "/tmp/fifo" #define BUFF_SIZE 1024 int main( void) { int counter = 0; int fd; char buff[BUFF_SIZE]; if(mkfifo(FIFO_FILE, 0666) == -1) { perror( "mkfifo() failed\n"); return -1; } if (( fd = open( FIFO_FILE, O_RDWR)) == -1) { perror( "open() failed\n"); return -2; } printf("FD=%d\n", fd); while( 1 ) { memset( buff, 0x00, BUFF_SIZE); read( fd, buff, BUFF_SIZE); printf( "%d: %s\n", counter++, buff); } close(fd); return 0; } /* The end of function */
송신하는 곳 #include#include #include #include #include #define FIFO_FILE "/tmp/fifo" int main( void) { int fd; char *str = "TEST FIFO IPC"; if ( -1 == ( fd = open( FIFO_FILE, O_WRONLY))) { perror( "open() failed\n"); return -1; } printf("FD=%d\n", fd); write(fd, str, strlen(str)); close(fd); return 0; } /* The end of function */
수신쪽 결과 $ ./recv FD=3 0: TEST FIFO IPC 1: TEST FIFO IPC 2: TEST FIFO IPC 송신쪽 결과 $ ./send FD=3 $ ./send FD=3 $ ./send FD=3
=============================================
open함수는 파일 열고 fd를 반환한다.
write함수는 바로 그 fd에다가 쓴다.
같은 시스템에서 같은 파일을 열면
동일한 fd를 가지게 되므로 위와 같이 쓸 수 있다.
=============================================
반응형
'Language > C' 카테고리의 다른 글
C FAQ (malloc 오류) (7) | 2012.07.12 |
---|---|
C FAQ (포인터 선언 에러) (7) | 2012.07.12 |
popen 함수 pclose 함수 예제 (175) | 2012.07.06 |
pipe 함수 예제 (451) | 2012.07.06 |
다차원 배열을 1차원 배열로 변경하고자 할 때 (161) | 2011.08.11 |