You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:45:47