问题标签 [fifo]

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 投票
1 回答
5191 浏览

python - 从 Python 程序写入 FIFO

我试图从 python 程序控制 mplayer 的音量。mplayer 程序从 bash 脚本开始:

然后我有一个用 Python 编写的 GUI,它应该能够控制正在播放的 mplayer 实例的音量。我尝试了以下方法:

如果我将 $musicvol 替换为数值,那会起作用,但不幸的是,这没有用。我需要能够传递变量。

我也可以通过从 Python 应用程序调用 bash 脚本来解决它,但我也无法让它工作:

0 投票
2 回答
189 浏览

linux - 控制文件描述符的准备情况

我有一个案例,我有一个复杂消息的传入流,在将它们以简化格式传递给实际处理程序之前需要进行一些处理。

我想使用一个FIFO文件描述符,一个线程从一端填充它,另一个线程从另一端读取。现在我想要的那种行为:读取线程正在等待select(),并且我想保证在唤醒时,有一个可以通过调用读取的完整包read(),即我想避免重新组装由于缓冲区大小导致的碎片(包保证低于内核到用户空间缓冲区传递限制)。

我想知道是否有一种方法可以配置 FIFO,以便我可以手动定义文件描述符何时准备好,即当生产者成功编写完整包时,我想有一种方法可以向读取准备就绪的读取端(通过文件描述符)。有没有办法通过ioctl()或者除了提供这种行为的FIFO之外还有一些抽象(在Linux世界中)?(我知道pthread和条件变量,但我希望生产者和消费者之间的耦合仅限于共享文件描述符。)

0 投票
2 回答
107 浏览

linux - 使用 shell 命令将数据汇集到守护进程的非守护进程中

这就是我想要做的:

$ serverise normally-barely-interactive-program-that-uses stdin stdout &
unique-id-221B $ clienty 221B "Astonishing!"
Elementary
$ clienty 221B "what did I just say?"
'Astonishing', although the methods are simple and easily followed, once explained.
$ clienty 221B "so, you persist between invokations of the client?"
Indeed.

我尝试过双命名管道,但它们只最后一次调用。我认为这是因为服务器端获得了 EOF,因此假设标准输入已被用户关闭。

套接字似乎是要走的路,但大多数包装器都采用类似 http 的模型,并且每次有人连接时都会派生一个新程序。socat 看起来还可以,但它也只是一口气就死了。

我已经看到用于此的 Gnu Screen 和 Tmux,但这似乎有点矫枉过正,老实说,我不能假设用户的环境不会包含任何一个,因此任何像这样的解决方案在脸上都会有点脆弱那些的非标准配置。这似乎也有点矫枉过正。

这似乎是一个以前会出现的问题,所以我必须在错误的地方寻找执行此操作的时髦的小实用程序。

0 投票
3 回答
970 浏览

perl - Perl IPC - FIFO 和守护进程 & CPU 使用率

我有一个邮件解析器 perl 脚本,每次用户收到邮件时都会调用它(使用 .qmail)。它从邮件中提取日历附件,并将文件的“路径”放入使用Directory::Queue 模块实现的 FIFO 队列中。

另一个 perl 脚本读取日历附件的路径并在本地系统和远程 CalDAV 服务器上执行某些文件操作,正在作为守护程序运行,如此所述。所以基本上这个脚本看起来像:

我正在使用 Proc::Daemon 将脚本作为守护进程运行。现在的问题是,这个进程几乎有 100% 的 CPU 使用率。以更标准、更安全的方式实施守护程序的建议方法是什么?我使用的代码与提到使用 Proc::Daemon 的链接中提到的代码几乎相同。

0 投票
1 回答
706 浏览

c - Linux 上由两个命名管道 (FIFO) 循环链接的两个过滤器

我想让两个进程通过 Linux 上的两个命名管道相互通信。每个进程都是一个 Unix 过滤器:它在其标准输入上读取数据并在其标准输出上写入数据。它们是循环链接的,第一个的输出是第二个的输入,反之亦然。

这是第一个过滤器 (ac) 的代码:

这是第二个过滤器(bc)的代码:

我编译 ( gcc -o A a.c && gcc -o B b.c),创建两个 fifo ( mkfifo b2a ; mkfifo a2b),在终端 ( ) 中运行第一个程序cat a2b | ./B > b2a,打开一个新终端并运行第二个程序 ( cat b2a | ./A > a2b)。

我期望的是 A 和 B 依次增加数字的无限循环,但我得到的是 B 卡住了,无法阅读 A 写的内容。

在我推出 B 的期限内,我得到:

在我启动 A 的终端中,我得到:

如果我使用 lsof :

为什么我没有得到我所期望的?

提前致谢。

0 投票
3 回答
2454 浏览

java - 在 Java 中实现固定大小的非阻塞队列的最有效方法是什么?

我试图找到(或编写)一个代表固定大小、非阻塞、自动丢弃 FIFO 队列的 Java 类。(例如,如果队列的容量为 100,则放置项目 101 会删除项目 1,然后成功附加项目 101。)这个问题的答案似乎很有帮助,但我有一个额外的限制 - 我需要它快,容量约为100-1000。

我的队列中的项目只是浮点数,因此使用链接问题中描述的内容通常更有效AutoDiscardingDeque<Float>,还是仅使用 afloat[]和一些System.arraycopy()操作来处理它?

或者,是否有我没有想到的更好的解决方案?

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 投票
1 回答
684 浏览

c++ - 用于 Sutter 的无锁队列的 C++0x atomic 的 Boost 库或等效实现?

Herb Sutter 的关于无锁和并发队列的文章在 SO 中已经被多次提及。但是,我没有 C++0x 编译器……所以我想知道是否有人翻译了他的代码以使用一些 boost 库或任何提供一些“原子”操作的东西。

即使有人可以提供互斥锁/条件变量示例,我也不介意...

以下是我参考的文章...

http://drdobbs.com/cpp/210604448

http://drdobbs.com/cpp/211601363

http://drdobbs.com/high-performance-computing/212201163

谢谢!

0 投票
1 回答
1023 浏览

c++ - 检查 stdin/std::cin 是否支持查找

编辑:我在代码中有一个愚蠢的错误并修复了这个问题,所以现在可以解释了。我相应地更新了我的帖子。

以下代码显示在行缓冲区内查找是有效的。

首先,将某些内容导入程序时的结果。

其次,我输入了“a[enter]s[enter]d[enter]f[enter]”。

getc第三,我为每个/get()调用输入了“asdf” 。

搜索似乎在行缓冲区内工作。

这是代码。

0 投票
3 回答
525 浏览

c# - C# 关于排队的建议

我正在就分配给我的一个项目寻求建议,并希望了解它是如何“专业地”完成的,或者任何可以引导我走向正确方向的建议。

我有一个服务器部件,它接受来自客户端的命令并将字节流推送到串行端口。尽管多个客户端可以向该服务器发送命令,但我们的硬件一次只能处理一个命令。我的问题是在软件端排队。

我已经实现了一个Queue<T>帮助类,它也将数据插入到一个 DataSet 中,其中包含:请求的客户端编号、消息数据(要写入串行端口的字节数组)和消息类型(命令描述)。它还将列出 DataGrid(在窗体上)中的队列命令。可能不是要走的路,但这是我唯一能想到的保留请求客户端和数据并在视觉上显示队列的方法。

我在哪里处理队列的处理?我考虑在自定义事件上处理它,如果 DataGrid 列表发生更改(添加/删除项目),则获取 DataSet 中的第一行数据并将其发送到串行端口。

非常感谢任何意见或建议。

谢谢。

编辑:我忘了补充一点,它也需要来自 SerialPort 的响应,以便从队列中删除当前执行的命令。