使用C语言创建简单FIFO失败,mkfifo函数返回-1求助
解决mkfifo创建FIFO失败返回-1的问题
你的代码最大的问题是只打印了模糊的错误提示,根本没法定位具体原因。mkfifo返回-1时,系统会把具体错误码存在errno里,你得把这个错误信息打出来才能知道问题出在哪。
先给你修改后的代码:
#include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> // 要加这个头文件才能用strerror int main(int argc, char * argv[]){ if(mkfifo("test", 0666) == -1) { // 两种打印错误的方式选一个就行 perror("创建FIFO失败"); // 或者用strerror:printf("创建FIFO失败: %s\n", strerror(errno)); } else { printf("FIFO创建成功\n"); } return 0; }
运行修改后的程序,你就能看到具体错误了,常见的几种情况:
- File exists:当前目录下已经有个叫"test"的文件或FIFO了,先删掉它再试
- Permission denied:你没有当前目录的写入权限,换个有权限的目录或者调整目录权限
- Read-only file system:当前目录所在的文件系统是只读的,没法创建新文件
- Invalid argument:权限参数传错了(不过你传的0666是合法的,这种情况少见)
另外提一句,0666是你期望的权限,但实际创建出来的权限会被系统的umask影响,比如默认umask是0022的话,实际权限会是0644,但这不会导致创建失败,只是权限和预期有差异而已。
内容的提问来源于stack exchange,提问作者Gomes
相关产品推荐
相关产品推荐

