问题标签 [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 回答
2092 浏览

bash - bash中非阻塞fifo的问题

我正在运行一些 Team Fortress 2 服务器,我想编写一个小管理脚本。

基本上,TF2 服务器是一个提供服务器控制台的 fg 进程,因此我可以启动服务器,输入状态并从中获得答案:

太好了,现在我想创建一个脚本,将命令 sm_reloadadmins 发送到我的所有服务器。我发现做到这一点的最好方法是使用 fifo 命名管道。现在我想要做的是让这个管道只读且非阻塞到服务器进程,所以我可以写入管道并且服务器执行它,但我仍然想通过控制台写入服务器,所以如果我切换回服务器的 fg 进程,我输入 status 我想打印一个答案。

我试过这个(假设serverfifo是mkfifo serverfifo):

不工作,服务器不会启动,直到有东西被写入管道。

这实际上工作得很好,我可以看到服务器的控制台输出,我可以写入 fifo 并且服务器执行命令,但我不能再通过控制台写入服务器了。此外,如果我将“退出”写入管道(应该结束服务器)并且我在屏幕上运行它,屏幕窗口会因某种原因被杀死(为什么?)。

我只需要服务器在不阻塞的情况下读取fifo,并且服务器本身上的所有键盘输入都应该发送到服务器,并且所有服务器输出都应该写入控制台。

那可能吗?如果是,如何?

0 投票
8 回答
97568 浏览

c++ - 我应该为 FIFO 使用哪个 STL 容器?

哪个 STL 容器最适合我的需求?我基本上有一个 10 元素宽的容器,我在其中不断push_back添加新元素,同时pop_front使用最旧的元素(大约一百万次)。

我目前正在使用 astd::deque来完成任务,但想知道 astd::list是否会更有效率,因为我不需要重新分配自己(或者我可能误认为 astd::dequestd::vector?)。或者是否有更有效的容器来满足我的需要?

PS我不需要随机访问

0 投票
6 回答
54458 浏览

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

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

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

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

OSError -17: 文件已存在

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

0 投票
2 回答
1299 浏览

latex - 在命名管道(fifo)上调用 LaTeX?

我在 Unix上的命名管道fifo上运行 LaTeX。我像这样创建fifo:

然后我像这样运行 LaTeX:

在我从另一个 shell 写入 fifo 之前,此过程会阻塞并且没有输出:

那么$ latex fifo的输出就变成了:

然而,LaTeX 进程永远不会结束。你怎样才能让 LaTeX 结束?我试过发送它 chr(0) 和 chr(4) (即ctrl-d),但都不起作用。是否有一些命令会告诉 LaTeX 退出(例如 \exit 之类的)?

谢谢阅读。

编辑

值得注意的是,当您运行tex而不是latex的变体时,以下内容将按预期工作:

(同时,在 tex 控制台中)

然而,尽管 Leslie Lamport 在A Document Preparation System LaTeX on page 233 中指出 \end 已被 \end{document} 取代,但以下任何一个都不会结束 LaTeX 会话:

0 投票
3 回答
369 浏览

c - 不完全是先进先出

我正在绞尽脑汁,但找不到解决方案。请考虑这种情况:

我有作家想要将非阻塞“队列”写入本地网络上的另一台机器,并且有一个阅读器将读取数据(如果没有作家,则为阻塞模式)并执行一些工作 A,然后在很长一段时间后返回并获取下一个数据。

所以场景是这样的:

  • 作家写道
  • 作家写道
  • 作家写道
  • 作家写道
  • 作家写道
  • 读者阅读和工作

    在读者忙碌的同时:

  • 作家写道
  • 作家写道
  • 作家写道
  • 作家写道
  • 作家写道
  • ETC ...

我想我可以用一个 tcp 守护进程作为阅读器来做到这一点,但这意味着它将与 fork(s) 同时运行,我希望阅读器一次处理一个,因为它会做一个 cpu 饥饿的工作。

我曾想过让 tcp 服务器获取请求,然后向 FIFO 发出信号,并从 FIFO 中读取另一个守护程序,但它具有相同的限制。

我的意思是 FIFO 必须在写入器写入时读取,并且我希望写入器的写入速度比读取器快很多倍。

一个 db 解决方案可以,但是 a) 它不是很快,b) 读者没有锁定..我不想用 sleep(x) 来实现它,这似乎不是一个好的编程技术。

有什么解决办法吗?

0 投票
4 回答
4923 浏览

sybase - 如何可靠地捕获 Sybase bcp 错误?

我们将命名管道与 Sybase bcp 一起使用,以便我们可以即时压缩输出。

Sybase bcp 实用程序不会在其退出代码中返回太多信息。Sybase 文档指导用户检查进程编写的错误消息。

这是我们使用的错误处理习惯用法的释义,脚本的非 bcp 部分中的一些错误检查已被删除以缩短示例。

基本上,如果“死锁”一词出现在 bcp 输出消息中,我们会再试一次。

两个问题

  1. 这种方法看起来合理吗?
  2. 除了死锁之外,我们还需要担心哪些其他 bcp 错误?

我对检测瞬时 bcp 错误特别感兴趣,我们可以再试一次。

我们使用复合语句,以便我们可以在压缩之前在 bcp 数据周围插入页眉和页脚,但为了简化示例,我省略了它。

0 投票
2 回答
3159 浏览

testing - 先进先出信号量测试

我已经实现了 FIFO 信号量,但现在我需要一种方法来测试/证明它们是否正常工作。一个简单的测试是创建一些线程尝试在信号量上等待,然后打印带有数字的消息,如果数字按顺序排列,则它应该是 FIFO,但这不足以证明这一点,因为该顺序可能有偶然发生的。因此,我需要一种更好的测试方法。
如有必要,也可以使用锁或条件变量。
谢谢

0 投票
5 回答
32104 浏览

unix - 具有多个读取器的 Unix 上的命名管道 (FIFO)

我有两个程序,Writer 和 Reader。

我有一个从 Writer 到 Reader 的 FIFO,所以当我在 Writer 中向 stdin 写入内容时,它会从 Reader 打印到 stdout。

我尝试在打开两个阅读器的情况下执行此操作,并且仅从两个阅读器程序中的一个将输出输出到标准输出。每次我运行它时,Unix 选择从哪个 Reader 程序打印 stdout 似乎是任意的,但是一旦它选择了其中一个程序,stdout 的每个输出都会从同一个 Reader 程序打印。

有谁知道为什么会这样?

如果我有两个 WRITER 程序,它们都可以写入同一个管道。

0 投票
1 回答
711 浏览

stored-procedures - Informix:使用 SQL/存储过程进行 Fifo 估值

我正在使用 IDS 10,我有一个简单的交易表,其中包含产品 ID、交易时间、数量、数量和价格的库存变化。
是否可以仅使用 SQL/存储过程来确定 FIFO 估值,还是需要使用 Perl 和 DBI 之类的东西来处理游标?
Fifo 估值需要从我的 pov 进行光标处理,因为我需要首先构建一个包含总交易量的临时表并处理然后排序的交易以计算相关交易的平均值。

0 投票
1 回答
243 浏览

ipc - 命名 FIFO 是否安全以防止普通用户看到敏感数据?

如果我有一些敏感数据要在两个进程之间传输,我可以在其中创建一个命名的 FIFO,/tmp并在使用后将其删除。我想知道这种方法是否安全?打破 FIFO 有多容易?

我知道有几种方法可以执行 IPC(进程间通信),但恕我直言,管道并不理想,因为它有时会在硬盘上留下缓冲数据;共享内存是安全的,但并不总是可行的。