问题标签 [mkfifo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1764 浏览

cygwin - mkfifo 导致终端挂起?

mkfifo根本不适用于 Cygwin ?一组简单的命令,例如

只是使终端永远坐着,光标闪烁。我“做错了”吗?

0 投票
2 回答
18661 浏览

c - mkfifo() 错误--->“创建命名管道时出错。:文件存在”

mkfifo 函数有 2 个参数,路径和模式。但我不知道它使用的路径格式是什么。我正在编写一个小程序来创建命名管道并作为mkfifo. 使用/home/username/Documents例如,但它总是返回 -1 和 message Error creating the named pipe.: File exists

我检查了这个目录很多次,里面没有管道。所以我想知道是什么问题。我在 mkfifo 中使用的模式是 0666 或 0777。

0 投票
2 回答
2165 浏览

c - C 中的 FIFO(命名管道)

尝试mkfifo()在当前目录中时出现权限错误。我绝对有权在这里创建文件。知道问题可能是什么吗?

0 投票
2 回答
1507 浏览

c++ - 以附加模式打开管道

我正在尝试打开一个fifo管道,一个线程写入该管道,同步都很好。但是,出于可以理解的原因,我需要以附加模式打开它。

当我按如下方式打开它时:

我没有任何问题,当我的文件夹“ls”时,我可以看到标记为黄色的管道

但是当我尝试如下打开管道时,在附加模式下:

我根本看不到文件夹中的管道。作为记录,我在任何一个选项中都没有收到错误有人知道为什么吗?

谢谢

0 投票
1 回答
3219 浏览

c - 使用 C 编程的 Linux 管道。通过管道重定向输入/输出

我是 linux 的初学者,但是我已经设法做了自己的 shell。是时候在其中添加管道了。(就是这样,作业说)。谁能向我解释一下如何做到这一点?我知道理论上,它应该这样工作。

但是,我无法让它工作。我整天都在做,但仍然没有。我确实理解这个想法,但我无法让它发挥作用。some1可以帮助我吗?这是我的管道部分的代码:

这是一个shell命令的例子

谢谢

0 投票
4 回答
6725 浏览

c - 在 C 中实现流水线。最好的方法是什么?

我想不出任何在c中实现流水线的方法,它实际上会起作用。这就是我决定在这里写的原因。我不得不说,我了解 pipe/fork/mkfifo 是如何工作的。我见过很多实现 2-3 管道的例子。这简单。我的问题开始了,当我必须实现 shell 时,管道数是未知的。

我现在所拥有的:例如。

我把这条线变成了这样的东西:

所以我可以使用

稍后的。

直到现在,我相信一切都好。当我尝试将这些功能的输入/输出重定向到彼此时,问题就开始了。

我是这样做的:

谢谢。

0 投票
1 回答
337 浏览

ocaml - Ocaml:FIFO 读取错误

好的,所以我正在使用 FIFO,我正在尝试构建一个小型库以在未来的程序中使用。

它应该能够创建一个命名管道,对其进行读取和写入。

我能够完成所有这些功能,但读取不正确。问题如下:

如果我说它应该读取大小为 10 个字符的缓冲区,那么只有当我写入超过 10 个字符时它才会正确打印,例如:

写入=“0123456789”->读取=“”写入=“012345678910111213”->读取=“”,“10111213”

我尝试了更多代码,并对异常“with”进行了小调试。如果读取失败,则存在此异常......它的作用是:关闭,等待,重新启动,最后返回 0(无)

然后我有一个 if 仅当字符数仅大于 0 时才正确,否则将打印“空”

所以,发生的事情是: write = "0123456789" -> reads = "empty" write = "012345678910111213" -> reads = "empty","10111213"

因此,在前 10 个字符上,他说读取失败,但他将它们从 FIFO 中删除。为什么?

抱歉,如果有点混乱。这是代码:

阅读程序:

这是缓冲区库:

编辑

我想要一些光,它杀了我......

谢谢

0 投票
2 回答
5881 浏览

c - FIFO 上的多个读取器/写入器(命名管道)

我使用 mkfifo 创建了一个命名管道,并在其上打开了读取器和写入器。然后我继续在同一个 fifo 上打开第二个读取器/写入器,但打开返回的是 ENXIO。

打开管道时是否需要设置任何特定标志以允许多次打开它?我已经阅读了文档,但没有找到关于为什么上面会失败的解释(到目前为止我只在 Cygwin 上测试过)。如此处所述,在 fifo 上打开多个读取器/写入器是完全有效的。

我将使用它来复制 WinAPI 的 OpenEvent 功能,该功能需要由单独的项目使用。

编辑:在 Debian 和 Ubuntu 上对此进行了测试——两​​者都符合 POSIX 并允许多个编写者(因此上面的代码没有出现任何问题)。Cygwin 的实现被破坏(即不符合 POSIX)。

0 投票
0 回答
1302 浏览

php - 重新打开现有的 FIFO 会出现错误“没有这样的文件或目录”

我正在尝试实现 PHP 网站和 C++ 程序之间的非常简单的通信。选择的解决方案是使用 Linux fifo。

这适用于第一个命令,但是当我们尝试重新打开文件时,会返回错误。有关错误消息的更多信息,请参阅下面的代码。

C++ 应用程序:

PHP:

C++ 应用程序:

上面的代码可能有什么问题?消息“没有这样的文件或目录”和“文件存在”是相当矛盾的。

顺便说一句:我对这种通信的另一种解决方案持开放态度,例如 C++ 解决方案或使用 boost 库的东西。

0 投票
3 回答
12138 浏览

linux - 使用 poll() 在命名管道上的 O_RDWR

我经历了各种不同的 linux 命名管道客户端/服务器实现,但它们中的大多数都在读/写时使用阻塞默认值。

因为我已经在使用 poll() 来检查其他标志,所以虽然通过 poll() 检查传入的 FIFO 数据也是一个好主意......

经过所有研究后,我认为以 O_RDWR 模式打开管道是在没有编写器打开管道时防止管道上无限数量的 EOF 事件的唯一方法。

这样管道的两端都是关闭的,其他客户端也可以打开可写端。为了回应我会使用单独的管道......

我的问题是,尽管我找到了一些使用 O_RDWR 标志的示例,但 open() 联机帮助页将该标志描述为在分配给 FIFO 时未定义。( http://linux.die.net/man/3/open )

但是你将如何在没有 O_RDWR 的管道上使用 poll() 呢?您认为“O_RDWR”是打开管道的合法方式吗???