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 中创建文件的主要内容,如果未能解决你的问题,请参考以下文章
Directory.CreateDirectory() 不在 ZipFile 中创建文件夹