【问题标题】:mkfifo() not creating file in Cmkfifo() 不在 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,表示成功。

标签: c named-pipes mkfifo


【解决方案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 的位置)时它不起作用。我尝试添加“/。”和管道名称前的“/”,都不起作用。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 2018-10-17
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多