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를 가지게 되므로 위와 같이 쓸 수 있다.
=============================================
반응형
'엔지니어' 카테고리의 다른 글
소프트웨어 개발방법론의 한계 (327) | 2012.07.06 |
---|---|
소프트웨어 개발방법론의 함정 (331) | 2012.07.06 |
popen 함수 pclose 함수 예제 (175) | 2012.07.06 |
pipe 함수 예제 (451) | 2012.07.06 |
네트워크 프로그래밍 - 시리얼 통신 - 자료 수신을 위한 poll (273) | 2012.05.30 |