问题标签 [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 投票
5 回答
251 浏览

c - 将数据提供给需要文件名的 C API

我正在 Linux 上编写一个简单的 C 程序,并希望使用现有库的 API,该 API 需要来自文件的数据。我必须将文件名作为 const char* 提供给它。但是我有数据,就像文件的内容一样,已经位于堆上分配的缓冲区中。有大量的 RAM,我们想要高性能。想要避免将临时文件写入磁盘,以看起来像文件的方式将数据提供给此 API 的好方法是什么?

这是我的代码的廉价假装版本:

奇妙图书馆.h:

normal-persons-usage.cpp,最初为其设计的库:

我的程序.cpp:

需要明确的是,marvelouslibrary 不提供任何通过指针接受数据的 API 函数。它只能读取一个文件。

我想到了管道和 mkfifo(),但似乎是为了在进程之间进行通信。我不是这些事情的专家。命名管道是否可以在同一进程中读取和写入?这是明智的做法吗?

或者跳过聪明,使用计划“B”,即shddup并只写一个临时文件。但是,除了获得高性能之外,我想学习一些新东西并找出在这种情况下可能发生的事情。

0 投票
2 回答
4409 浏览

named-pipes - 命名管道类似于“mkfifo”创建,但双向

我想创建一个命名管道,就像“mkfifo”创建的那样,但有一个警告。我希望管道是双向的。也就是说,我希望进程 A 写入 fifo,进程 B 从中读取,反之亦然。由“mkfifo”创建的管道允许进程 A 读取其写入管道的数据。通常我会使用两个管道,但我试图模拟一个实际的设备,所以我希望 open()、read()、write() 等的语义尽可能与实际设备相似。任何人都知道无需借助两个管道或命名套接字即可完成此任务的技术吗?

0 投票
6 回答
54458 浏览

python - 在 Python 中创建一个临时 FIFO(命名管道)?

如何在 Python 中创建临时 FIFO(命名管道)?这应该有效:

但是,我犹豫不决,因为Python Docs 11.6中的大警告和潜在的删除,因为它已被弃用。

编辑:值得注意的是,我已经尝试过tempfile.NamedTemporaryFile(并通过扩展tempfile.mkstemp),但os.mkfifo抛出:

OSError -17: 文件已存在

当您在 mkstemp/NamedTemporaryFile 创建的文件上运行它时。

0 投票
2 回答
2868 浏览

python - 使用带有文件描述符的 Python Twisted 的示例

我希望使用 twisted 来控制主进程和一组从进程之间跨 Linux 管道(os.pipe())和 fifos(os.mkfifo())的通信。虽然我很肯定,可以将twisted 用于这些类型的文件描述符(毕竟,twisted 非常适合*nix 抽象为文件描述符的tcp 套接字),但我找不到这种用法的任何示例。有人有任何链接、示例代码或建议吗?

0 投票
4 回答
14587 浏览

python - 用于 Windows 的 python os.mkfifo()

短版(如果你能回答它对我有用的短版,其余的主要是为了其他有类似任务的人的利益):

在 Windows 的 python 中,我想创建 2 个文件对象,附加到同一个文件(它不必是硬盘上的实际文件),一个用于读取,一个用于写入,这样如果读取结束尝试读取它永远不会得到 EOF(它只会阻塞直到写入某些内容)。我认为在 linux os.mkfifo() 中可以完成这项工作,但在 Windows 中它不存在。可以做什么?(我必须使用文件对象)。

一些额外的细节:我有一个 python 模块(不是我写的),它通过标准输入和标准输出(使用 raw_input() 和打印)玩某个游戏。我也有一个 Windows 可执行文件通过标准输入和标准输出玩同样的游戏。我想让他们互相对战,并记录他们所有的交流。

这是我可以编写的代码(该get_fifo()功能未实现,因为这是我不知道在 Windows 上做的):

0 投票
2 回答
10998 浏览

c - 在 C 中打开 FIFO 时遇到问题

我在 C 中打开 FIFO 时遇到了麻烦。首先我使用 mkfifo() 函数创建了它们,权限为:0777,当我尝试打开它们时,它只成功打开了第一个 FIFO,然后进程将卡在打开第二个 FIFO,这是我的代码:

这不会被执行,但是一旦我评论第二行,它就会执行!每个进程打开 FIFO 的数量是否有限制?我不知道为什么会这样.. 我花了 3 个小时试图找出问题所在,但没有任何结果:(

0 投票
2 回答
3270 浏览

mysql - 从linux中的FIFO管道连续向mysql表数据插入数据

我想将来自fifo管道的数据插入到mysql表中,现在对我来说,这在fifo管道进程被杀死之前是可能的,

命令 :

插入fifo管道中的数据,直到mysql的进程被kill进程关闭。

是否可以在不终止 fifo 管道数据进程的情况下插入数据?

谢谢!!

0 投票
2 回答
6455 浏览

python - Python 和 FIFO

我试图在 linux 下使用 Python 来理解 FIFO,但我发现了一个我不理解的奇怪行为。

以下是fifoserver.py

这是fifoclient.py

mkfifo input我还使用和创建了两个 FIFO mkfifo output

我不明白的是,为什么当我在一些请求后从两个控制台运行服务器(with python fifoserver.py input output)和客户端(with )时,客户端崩溃并出现“断管”错误。请注意,在崩溃之前,我已经看到数百到数千个正确处理的请求运行良好。python fifoclient.pyf.flush()

我的代码有什么问题?

0 投票
2 回答
3343 浏览

bash - 如何在脚本中使用 exec 3>myfifo 并且不让 echo foo>&3 关闭管道?

为什么我不能像在终端中那样在 bash 脚本中使用 exec 3>myfifo ?

我正在使用命名管道将 awk 过滤器变成一个简单的“服务器”,它应该能够从客户端获取文本输入,过滤它,并在 NUL 上刷新。

在终端 1 中,服务器运行如下:

我有一个简单的脚本,应该将输入(以 NUL 结尾)放入输入管道,从输出管道读取,然后退出,而不向服务器发送 EOF(我们不希望服务器重新启动):

现在,如果我在终端 2 执行$ echo This is wrong | bash client.sh,我会This is correct返回,但终端 1 显示服务器重新启动!但是,如果我从终端 2 中运行来自 client.sh 的命令,它不会重新启动。

它似乎与 exec 命令有关,因为我也可以

它不会重新启动。如果我那时

(当然会重新启动一次)并执行

它每次都会重新启动。所以脚本中的 exec 命令似乎没有效果。但是,将ls /proc/$$/fd/脚本中的 exec 命令放在后面表明它们确实指向正确的管道。

我在这里想念什么?

0 投票
3 回答
500 浏览

c - 在 C (UNIX) 中重定向到输入/输出的语法

我试图找到让我在使用 mkfifo() 函数并使用 fork 创建子进程后将标准输入输出重定向到命名管道的语法。

我应该查看哪个手册页的语法?

谢谢,亚伦