특이하다면 특이하고, 당연하다면 당연하게
fifo는 쓸 녀석과, 읽을 녀석이 둘다 요청이 들어올때 까지 open() 에서 blocking 된다.
strace를 이용해서 확인해보면 각각 실행할 경우
O_RDONLY를 주던 O_WRONLY를 주던 간에 open() 함수에서 block 되어있다
두개 프로그램이 read/write pair가 만들어지면 그제서야 open()을 넘어가게 된다.
open()을 non_block 으로 해서 name pipe의 pair가 만들어지길 기다리는 것도 방법 일 듯.
$ strace ./rx openat(AT_FDCWD, "/tmp/fifo", O_RDONLY |
$ strace ./tx 2 openat(AT_FDCWD, "/tmp/fifo", O_WRONLY |
[링크 : https://tutorialspoint.dev/computer-science/operating-systems/named-pipe-fifo-example-c-program]
걍 이렇게 하고 나서 해보면 되려나?
int fifo_fd = open(fifo_path, O_RDONLY | O_NONBLOCK); FILE *fp = fdopen(fifo_fd, "r"); |
[링크 : https://cboard.cprogramming.com/c-programming/89358-nonblocking-fifo.html]
'Linux API > linux' 카테고리의 다른 글
mkpipe 와 poll (0) | 2022.10.26 |
---|---|
‘F_SETPIPE_SZ’ undeclared (0) | 2022.10.20 |
SIGPIPE (0) | 2022.10.17 |
linux ipc 최대 데이터 길이 (0) | 2022.10.11 |
ipc 성능 비교 (0) | 2022.09.21 |