问题标签 [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.
cygwin - mkfifo 导致终端挂起?
mkfifo
根本不适用于 Cygwin ?一组简单的命令,例如
只是使终端永远坐着,光标闪烁。我“做错了”吗?
c - mkfifo() 错误--->“创建命名管道时出错。:文件存在”
mkfifo 函数有 2 个参数,路径和模式。但我不知道它使用的路径格式是什么。我正在编写一个小程序来创建命名管道并作为mkfifo
. 使用/home/username/Documents
例如,但它总是返回 -1 和 message Error creating the named pipe.: File exists
。
我检查了这个目录很多次,里面没有管道。所以我想知道是什么问题。我在 mkfifo 中使用的模式是 0666 或 0777。
c - C 中的 FIFO(命名管道)
尝试mkfifo()
在当前目录中时出现权限错误。我绝对有权在这里创建文件。知道问题可能是什么吗?
c++ - 以附加模式打开管道
我正在尝试打开一个fifo管道,一个线程写入该管道,同步都很好。但是,出于可以理解的原因,我需要以附加模式打开它。
当我按如下方式打开它时:
我没有任何问题,当我的文件夹“ls”时,我可以看到标记为黄色的管道
但是当我尝试如下打开管道时,在附加模式下:
我根本看不到文件夹中的管道。作为记录,我在任何一个选项中都没有收到错误有人知道为什么吗?
谢谢
c - 使用 C 编程的 Linux 管道。通过管道重定向输入/输出
我是 linux 的初学者,但是我已经设法做了自己的 shell。是时候在其中添加管道了。(就是这样,作业说)。谁能向我解释一下如何做到这一点?我知道理论上,它应该这样工作。
但是,我无法让它工作。我整天都在做,但仍然没有。我确实理解这个想法,但我无法让它发挥作用。some1可以帮助我吗?这是我的管道部分的代码:
这是一个shell命令的例子
谢谢
c - 在 C 中实现流水线。最好的方法是什么?
我想不出任何在c中实现流水线的方法,它实际上会起作用。这就是我决定在这里写的原因。我不得不说,我了解 pipe/fork/mkfifo 是如何工作的。我见过很多实现 2-3 管道的例子。这简单。我的问题开始了,当我必须实现 shell 时,管道数是未知的。
我现在所拥有的:例如。
我把这条线变成了这样的东西:
所以我可以使用
稍后的。
直到现在,我相信一切都好。当我尝试将这些功能的输入/输出重定向到彼此时,问题就开始了。
我是这样做的:
谢谢。
ocaml - Ocaml:FIFO 读取错误
好的,所以我正在使用 FIFO,我正在尝试构建一个小型库以在未来的程序中使用。
它应该能够创建一个命名管道,对其进行读取和写入。
我能够完成所有这些功能,但读取不正确。问题如下:
如果我说它应该读取大小为 10 个字符的缓冲区,那么只有当我写入超过 10 个字符时它才会正确打印,例如:
写入=“0123456789”->读取=“”写入=“012345678910111213”->读取=“”,“10111213”
我尝试了更多代码,并对异常“with”进行了小调试。如果读取失败,则存在此异常......它的作用是:关闭,等待,重新启动,最后返回 0(无)
然后我有一个 if 仅当字符数仅大于 0 时才正确,否则将打印“空”
所以,发生的事情是: write = "0123456789" -> reads = "empty" write = "012345678910111213" -> reads = "empty","10111213"
因此,在前 10 个字符上,他说读取失败,但他将它们从 FIFO 中删除。为什么?
抱歉,如果有点混乱。这是代码:
阅读程序:
这是缓冲区库:
编辑
我想要一些光,它杀了我......
谢谢
c - FIFO 上的多个读取器/写入器(命名管道)
我使用 mkfifo 创建了一个命名管道,并在其上打开了读取器和写入器。然后我继续在同一个 fifo 上打开第二个读取器/写入器,但打开返回的是 ENXIO。
打开管道时是否需要设置任何特定标志以允许多次打开它?我已经阅读了文档,但没有找到关于为什么上面会失败的解释(到目前为止我只在 Cygwin 上测试过)。如此处所述,在 fifo 上打开多个读取器/写入器是完全有效的。
我将使用它来复制 WinAPI 的 OpenEvent 功能,该功能需要由单独的项目使用。
编辑:在 Debian 和 Ubuntu 上对此进行了测试——两者都符合 POSIX 并允许多个编写者(因此上面的代码没有出现任何问题)。Cygwin 的实现被破坏(即不符合 POSIX)。
php - 重新打开现有的 FIFO 会出现错误“没有这样的文件或目录”
我正在尝试实现 PHP 网站和 C++ 程序之间的非常简单的通信。选择的解决方案是使用 Linux fifo。
这适用于第一个命令,但是当我们尝试重新打开文件时,会返回错误。有关错误消息的更多信息,请参阅下面的代码。
C++ 应用程序:
PHP:
C++ 应用程序:
上面的代码可能有什么问题?消息“没有这样的文件或目录”和“文件存在”是相当矛盾的。
顺便说一句:我对这种通信的另一种解决方案持开放态度,例如 C++ 解决方案或使用 boost 库的东西。
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”是打开管道的合法方式吗???