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

java - 重定向应用程序(java)的输入,但仍然允许 BASH 中的标准输入

我有点困惑,我昨天有这个工作,但它几乎神奇地停止接受重定向的标准输入。

这运行良好,我可以将内容回显到 inputfifo 并且应用程序得到了它,我也可以直接在它的控制台中输入。它甚至可以通过屏幕工作。代码方面绝对没有任何变化,但重定向的标准输入已停止工作。我尝试将文件描述符更改为 9,甚至 127,但都没有修复它。

我是不是忘记了什么?是否有特定原因它破裂并且不再起作用?

(我使用它而不是向屏幕本身发送输入,因为我启动屏幕分离并且它拒绝接收输入,除非它至少被附加一次,我不知道这是一个错误还是有意的)

0 投票
1 回答
1268 浏览

list - SWI Prolog:差异列表 - fifo

我正在学习 Prolog,差异列表对我来说是超级新的,看起来就像地狱一样,尤其是我绝对是可怜的、头脑简单的 C++ 人:) 我的任务有问题:

addall(-E, +G, +S, -R) 将满足目标 G(变量 E 出现在其中)的变量 E 的所有替换结果添加到集合 S 并返回一个新集合 R(此谓词类似于标准谓词 findall=3 和 findall=4)。

我已经使用 LIFO 集合实现了这一点,但 FIFO 有问题,请考虑以下用法:

没关系,集合 W 是 [8,6,4,2,0] 但是:

给我W = [9, 7, 5, 3|[1|_G3761]-_G3761]。我想要的是[9,7,5,3,1|_G3761]-_G3761。我不知道出了什么问题,尤其是:

工作得很好。我的代码:

提前致谢。

0 投票
1 回答
28399 浏览

file-io - 为什么只读打开命名管道块?

在使用 Python 处理各种 UNIX(Linux、FreeBSD 和 MacOS X)下的命名管道(FIFO)时,我注意到了一些奇怪的地方。第一个,也许是最烦人的是,尝试打开一个空/空闲 FIFO 只读会阻塞(除非我使用os.O_NONBLOCK较低级别的os.open()调用)。但是,如果我打开它进行读/写,那么我不会被阻塞。

例子:

我只是好奇为什么。为什么 open 调用阻塞而不是一些后续的读取操作?

此外,我注意到非阻塞文件描述符可以表现出 Python 中的不同行为。在我os.open()os.O_NONBLOCK初始打开操作一起使用的情况下,os.read()如果文件描述符上的数据尚未准备好,则 an 似乎返回一个空字符串。但是,如果我使用fcntl.fcnt(f.fileno(), fcntl.F_SETFL, fcntl.GETFL | os.O_NONBLOCK)thenos.read会引发异常 ( errno.EWOULDBLOCK)

是否有一些其他标志open()由我的os.open()示例未设置的正常设置?它们有何不同,为什么?

0 投票
3 回答
3720 浏览

c# - c# 有限字典

我想构建一个字典(键,值),但我希望这个字典的大小有限,例如 1000 个条目,所以当我丰富这个限制大小时,我想删除第一个元素并添加一个新元素(FIFO) .

我想使用字典,因为我总是在字典中搜索键(我需要它会很快)

这个怎么做?

0 投票
15 回答
96881 浏览

c# - 固定大小的队列,在新入队时自动将旧值出列

我正在使用ConcurrentQueue一个共享数据结构,其目的是保存传递给它的最后 N 个对象(一种历史)。

假设我们有一个浏览器,我们想要最近 100 个浏览的 Url。我想要一个队列,当容量已满(历史上的 100 个地址)时,它会在新条目插入(入队)时自动丢弃(出队)最旧的(第一个)条目。

我怎样才能做到这一点System.Collections

0 投票
3 回答
1273 浏览

bash - 努力弄清楚如何在这个 init.d 启动脚本中使用 FIFO

摘要:在我的 init.d 启动脚本中使用命名管道寻找一些帮助。管道启动时不工作,我不知道如何杀死它。

我有这个启动脚本,我在 Ubuntu 10.04 x64 中使用它来启动我的世界服务器。我需要做的一件事是设置一个读取 FIFO,以便我可以将命令从 shell 传递到服务器。我制作了一个 .fifo 文件,如果我从 shell 手动启动服务器,效果很好,如下所示:

当我将 tail -f minecraft.fifo 插入到初始化脚本中时,我正在苦苦挣扎。当我启动服务时,“tail -f minecraft.fifo”启动;但它不会像我从 shell 手动启动它时那样将命令传递给 minecraft 服务器。

另外,我不知道如何停止命名管道。到目前为止,我认为我需要保存进程的 PID,然后在停止期间终止该 PID。但我不知道如何从 $ 中获取 PID!到一个变量中,以便我可以回忆它。

说得通?当我调用它时,尾巴不起作用,我不知道如何杀死尾巴进程。

这是不包含命名管道的正常启动脚本:

如果我这样修改 DAEMON 变量,脚本会启动它,并且可以使用 ps -ef 找到 tail -f:

但是如果我向 minecraft.fifo 回显命令,服务器不会读取它。查看 ps,似乎 tail -f minecraft.fifo 实际上是在一个单独的进程中开始的。这可能是问题所在。

注意:我使用 SCREEN 命令来调用 DAEMON,因为我需要一种方法来跳转到正在运行的服务器并向其发出命令。所以我只是 screen -r 作为用户 minecraft 然后我可以使用服务器。然而,一旦这个 fifo 工作,我将不再需要屏幕的东西。因此,如果这妨碍了它,则可以将其删除。

至于杀了它;如果我在 mc_stop 中放一个 killall tail,它就可以工作。但这会杀死所有尾巴,而且我还有其他人在奔跑,我不想杀死。到目前为止,我还没有弄清楚如何以存储 PID 的方式启动服务器,以便我可以使用 PID 进行终止。或者以唯一的进程名称开始尾部,这样我就可以在不危及其他尾部的情况下杀死它。

关于如何使用命名管道正确启动服务器的任何想法;然后如何正确阻止它?

0 投票
2 回答
1337 浏览

c - Unix fifo 客户端到服务器

我想以这样的方式使用一对 Unix FIFO:

  • 客户端向服务器发送文件名和
  • 服务器返回给客户端:给定文件的字数、行数和字节数。

能否请你帮忙?

客户端.c

服务器.c

我做了一些改进,但仍然无法正常工作。

0 投票
4 回答
9327 浏览

unix - 防止 FIFO 关闭/重用已关闭的 FIFO

考虑以下场景:

创建了一个名为的 FIFO test。在一个终端窗口 (A) 我运行cat <test并在另一个 (B) 中运行cat >test。现在可以在窗口 B 中写入并在窗口 A 中获取输出。也可以终止进程 A 并重新启动它,并且仍然可以怀疑使用此设置。但是,如果您在窗口 B 中终止进程,则 B 将(据我所知)通过 FIFO 向进程 A 发送 EOF 并终止该进程。

事实上,如果您运行的进程未在 EOF 上终止,您仍然无法使用重定向到该进程的 FIFO。我认为这是因为这个 FIFO 被认为是关闭的。

有没有办法解决这个问题?

我遇到这个问题的原因是因为我想向在屏幕会话中运行的 minecraft 服务器发送命令。例如:echo "command" >FIFO_to_server。这可能通过单独使用屏幕来实现,但我对屏幕不是很满意,我认为仅使用管道的解决方案会更简单、更清洁。

0 投票
1 回答
11764 浏览

c - 在C中读/写结构到fifo

我正在尝试使用命名管道在进程之间传递结构。我被困在试图打开管道非阻塞模式。这是我写入fifo的代码:

routing_table 是一个指向我的结构的指针,它已被分配,所以不存在 fifo 的名称或类似的问题。如果我在没有 O_NONBLOCK 选项的情况下打开 fifo,它会第一次写入 smth,但随后它会阻塞,因为我也无法读取结构。并且在第一次之后,创建了初始fifo,但出现了其他fifo,命名为'.','..'。设置了 O_NONBLOCK 选项后,它会创建 fifo,但总是会抛出错误:“没有这样的设备或地址”。知道为什么会这样吗?谢谢。

编辑:好的,所以我现在很清楚打开 fifo,但我还有另一个问题,事实上,将结构读/写到 fifo 是我开始的问题。我读取结构的代码:

它打开fifo并尝试读取,但fifo中似乎没有任何内容,尽管在第一次writeUpdate中它说它写了4个字节(这似乎也是错误的)。在阅读时,第一次打印'a'然后num_bytes总是<=0。我环顾四周,只发现这个例子,简单的写/读,写一个结构时还需要什么吗?

我的结构如下所示:

0 投票
1 回答
435 浏览

java - 带阅读器的循环缓冲区

我需要一个支持可搜索阅读器的循环缓冲区实现。我的用例:

在我的代码中,我收集日志消息。最终,用户可能会访问一个页面,该页面显示他们的格式很好。为了确保消息不会填满 RAM,我需要一个固定大小的 FIFO 结构。如果用户长时间不访问该页面,消息就会被丢弃。没关系。

只要用户停留在页面上,新的日志消息就应该附加到页面上。通过 JavaScript,用户可以定义要保留多少消息。这完全独立于我的应用程序中的缓冲区大小。所以我需要一个数据结构的读者,我可以用它来迭代任何新元素。

如果用户重新加载页面或第一次加载,我需要将阅读器设置为 FIFO 中最旧的元素。

添加消息时,必须更新阅读器。如果浏览器未能足够快地获取新消息,则阅读器最终应该指向 FIFO 中最旧的消息。这意味着用户可能会错过几条消息。这并不完美,但应该是不常见的情况。如果读者可以告诉我“错过了 5 条消息”,那将是完美的,但我可以没有它。

您知道提供此功能的现有实现吗?