mkfifo() 不在 C 中创建文件

Posted

技术标签:

【中文标题】mkfifo() 不在 C 中创建文件【英文标题】:mkfifo() not creating file in C 【发布时间】:2014-07-22 17:47:10 【问题描述】:

我正在尝试在 C 中创建一个命名管道,但没有成功。

这是我的代码:

pid_t pid = getpid() ;
char * pipeNameo = malloc( sizeof(char) * 100 ) ;
len = 0 ;

//len += sprintf( pipeNameo + len, "%s", "/Users/Davidb/Desktop/") ; // tried various paths
len += sprintf( pipeNameo + len, "%ld", (long)pid) ;
len += sprintf( pipeNameo + len, "%s", "_") ;
len += sprintf( pipeNameo + len, "%d", i) ; // it is in a loop, i starts at 0 and increments
len += sprintf( pipeNameo + len, "%s", "o") ;

printf("pipeNameo : %s\n", pipeNameo ) ;
val = mkfifo(pipeNameo, 0666) ;
printf("Did named pipe succeed: %d\n", val) ;

所以在运行这个之后,我检查了目录,并没有创建文件。 这是一些示例输出:

OUTPUT, when loop runs twice
pipeNameo : /Users/Davidb/Desktop/1152_0o
Did named pipe succeed: 0
pipeNameo : /Users/Davidb/Desktop/1152_1o
Did named pipe succeed: 0

请帮忙:)

更新 好的,当路径设置为我的桌面时,我看到 ls -l 有效!但是当我尝试将其设置为当前目录(存储 main.c 的位置)时它不起作用。我尝试添加“/。”和管道名称前的“/”,都不起作用。

【问题讨论】:

是否可以从命令行运行? mkfifo()返回0,表示成功。 【参考方案1】:

mkfifo() 将以您在pipeNameo 中提供的名称创建用于进程间通信的命名管道。命名管道是为 IPC 机制在硬盘中创建的。

在命令行中输入ls -l 以查看该文件。

更多参考mkfifo()

【讨论】:

但是fifo在文件系统中应该是可见的(否则其他进程无法打开)。 @MartinR 但它是否像其他文件一样正常可见? 是的,如果您调用ls -l,第一个标志将显示为'p':prw-r--r-- 1 leo abkdev 0 2014-07-21 19:32 fifo @IngoLeonhardt 谢谢你的朋友! 好的,当路径设置为我的桌面时,我看到 ls -l 有效!但是当我尝试将其设置为当前目录(存储 main.c 的位置)时它不起作用。我尝试添加“/。”和管道名称前的“/”,都不起作用。

以上是关于mkfifo() 不在 C 中创建文件的主要内容,如果未能解决你的问题,请参考以下文章

mkfifo 文件权限未正确执行

Android不在图库中创建文件夹

有名管道通讯编程

Directory.CreateDirectory() 不在 ZipFile 中创建文件夹

在 PHP 中创建文件并将其上传到 FTP 服务器而不在本地保存

使 SaveFileDialog 不在用户选择的目录中创建测试文件