C语言命名管道open阻塞的原因与解决方法
open()的第一个参数是文件路径,第二个参数是打开的文件的读写方式(只写,只读,读写)与堵塞/非堵塞设置。
由于open函数的第二个参数如果加上O_NONBLOCK非堵塞,则会在执行open的时候立即返回,若出错则会设置errno。本话题旨在解决不设置O_NONBLOCK非堵塞时出现的堵塞情况分析。
查阅博客资料,发现有关读写打开的堵塞在此不再赘述,请移步博客连接:
http://blog.csdn.net/men_wen/article/details/59158365
若非上述原因导致的open堵塞,那就是open的第一个参数导致的原因,即文件路径。(个人在此处被某博客误导,后才找到的原因)
错误的文件路径打开方式:
char *FIFO = "/tmp/myfifo"
int fd;
fd = open(FIFO,O_WRONLY);
正确的文件路径打开方式:
#define FIFO "/tmp/myfifo"
int fd;
fd = open(FIFO,O_WRONLY);
那这个问题其实是归类到open的运用上。
原因是:char *FIFO = “/tmp/myfifo”,放入open之后实际上是将没有双引号的/tmp/myfifo放到了第一个参数的位置上,出现了问题,导致了open堵塞。
阿猪米德
2019.05.20于湖北武汉