Linux API/linux
linux fifo
구차니
2022. 10. 18. 18:20
특이하다면 특이하고, 당연하다면 당연하게
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]