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

linux - 为什么 Klocwork 抱怨 S_IRWXU 是一个 int?

这是代码:

对于 if 检查,我得到了 Klocwork misra:
Operand of bitwise operation has type 'int' 而不是 'unsigned integer'

在同一行,lint 说:
违反 MISRA 2004 要求的规则 10.1,禁止隐式转换:有符号与无符号

但我知道 mkfifo 采用的第二个参数是mode_t类型,它实际上应该是一个无符号整数。因此我们知道

应该没有问题。

知道为什么我会收到这样的警告吗?

0 投票
1 回答
370 浏览

php - 限制 posix_mkfifo

在 PHP 中,有一个调用:posix_mkfifo(),它基本上是一个 fifo。有没有办法对此文件/fifo 设置限制?否则,如果没有人提取数据,它可能会无限增长。

提前感谢您的帮助。

0 投票
1 回答
508 浏览

python - 根据输入文件内容创建多个命名管道 (fifo)

脚本将一个日志文件拆分为一些较小的文件:

输入文件示例:

生成的输出文件名示例:

但是现在,我想创建输出fifo 而不是常规文件

fifo(命名管道)应该使用与当前常规文件相同的文件名。例如,可以使用工具编写一个 shell 脚本,如下所示:

常识:

  • 脚本不应该知道所有可能的主题和领域
  • 该脚本不需要创建多次相同的FIFO

如果不适合此目的,我愿意接受任何其他语言,如等。...

你会选择什么编程语言来实现这个脚本?shell/awk/perl/python/ruby...
你建议什么作为实现?


编辑:凯文的回答是正确的。他的剧本还有另一种选择:

您仍然可以基于awk或任何其他编程语言提出您的想法;)

要测试您的脚本,您可以在另一个终端中运行以下 shell 命令:

0 投票
0 回答
375 浏览

linux - Linux:有没有办法在写入端以非阻塞模式使用命名的 fifo?

我发现了很多关于 Linux 上管道的问题和答案,但几乎都讨论了读者方面的问题。

对于一旦数据可用并且读取进程连接就准备好将数据传递到命名管道的进程,有没有办法以非阻塞方式:

  1. 等待 (poll(2)) 让读者打开管道,
  2. 在循环中等待(再次轮询(2))以获取写入管道不会阻塞的信号,并且
  3. 当收到这样的信号时,检查有多少字节可以写入管道而不阻塞

我了解如何做 (2.),但我无法为 (1.) 和 (3.) 找到一致的答案。

编辑:我正在寻找(类似于)FIONWRITE 用于管道,但 Linux 没有 FIONWRITE(用于管道)(?)

EDIT2:作者的预期主循环(一种伪代码,目标语言是 C/C++):

0 投票
0 回答
397 浏览

python - 使用 Python 向一个 FIFO 写入请求并从另一个 FIFO 读取响应

我需要使用 /tmp 中的命名 FIFO 与进程(Kamailio SIP 服务器)通信。它的工作方式是我需要设置自己的响应 FIFO,然后将请求写入 Kamailio,Kamailio 会将响应写回我的 FIFO。

所以,我怎么理解它应该去..

  • mkfifo 在 /tmp 中新建一个临时 FIFO,用于接收响应。我使用 os.getpid() 来创建一个唯一的名称,例如 /tmp/response_1234_fifo
  • 尝试打开(fifo,“r”)FIFO并读取()它..但这将在open()中阻塞,因为还没有人打开FIFO进行写入

  • 将请求写入众所周知的静态 FIFO(例如 /tmp/request_fifo)。此请求包含我的响应 FIFO 的名称

  • Kamailio 将处理请求,打开我的响应 FIFO 进行写入并 write() 对它的响应。

  • 此时我的 open() 应该可能会解除阻塞并且 read() 会接收数据。但它似乎没有这样做。它有时有效,但有时无效。

  • 写完响应后,Kamailio 将关闭我的响应 FIFO,这将导致下一次 read() 的 EOF

  • 现在我可以 rm 临时响应 FIFO

在尝试以几种不同的方式执行此操作后,我的大脑已经关闭,包括线程、popen:“cat < response_fifo”,甚至尝试使用非阻塞打开和轮询..

如果我看看运行命令的 Kamailio shell 脚本是如何做到的,它是如此简单,让我哭泣 :)

有人在 Python 中有一个优雅的解决方案吗?

0 投票
3 回答
1037 浏览

c - C中FIFO读/写的奇怪行为

我有一个使用 FIFO 重现服务器的 C 程序。该程序从输入 FIFO 中读取两行——一个数字n和一个字符串str——并写入输出 FIFOn行,每行都是str. 我写了以下代码。

该程序编译并运行没有错误,但它在每次执行时输出不同数量的字符串。例如,如果输入 FIFO 中的两条输入行是5\nhello,那么它会在每次运行时打印出 1 到 25 次出现的hello(频率似乎是完全随机的)。

我已经坚持了两天了。请给我一些帮助。

0 投票
1 回答
581 浏览

php - PHP 和 C 之间的 FIFOS

我想使用 FIFOS 通信 2 个进程。一个进程用 C 编写,另一个进程用 PHP 编写。问题是,如果我使用 FIFOS,写入器会阻塞,直到读取器打开 FIFO,并且在另一个方向上也是如此。我解释得更好,我有一个接收 xml 请求的 PHP 进程。PHP 获取 xml 并将其发送到 FIFO1(与 C 进程连接)。C 进程读取 FIFO1 需要 xml 做一些事情并将响应发送到 FIFO2(与 PHP 连接)。我想以非阻塞方式进行。我的意思是,如果 PHP 进程无法从 FIFO2 中读取任何内容,则它不会阻塞并且它可以同时接收 xml 请求。如果有人感兴趣,我可以在这里发布我的代码。

谢谢 ;)。

0 投票
1 回答
454 浏览

objective-c - 写入fifo文件

我已经使用mkfifo /tmp/my.fifo. 我现在想将字符写入文件(使用 Objective C),以便能够通过tail -f /tmp/my.fifo. 由于某种原因,这不起作用。tail 命令只显示一个字符,然后停止输出。

目标 C 代码:

NSLog 不输出任何内容。所以从Objective C的角度来看,显然没有错误。

0 投票
2 回答
5852 浏览

c - 使用命名管道在 C 中实现聊天

我使用 FIFO 命名管道为客户端和服务器创建了两个管道。然后我尝试执行客户端和服务器之间的通信。当从客户端向服务器发送消息时,通信有效,反之亦然。请帮助。

这是三个代码:

fifo.c(创建管道)

server.c(从客户端发送和接收)

client.c(从服务器发送和接收)

0 投票
1 回答
2569 浏览

linux - 如何在 Linux char 设备驱动程序中使用 FIFO,以便使用该驱动程序的两个进程可以通信

我有一个用于虚拟设备的 char 设备驱动程序。我想要设备驱动程序中的 FIFO,以便使用设备驱动程序的 2 个进程可以在它们之间传输字符。我试过 kfifo,但我是新手,发现它很难使用。任何人都可以建议一些其他方法来在 Linux 驱动程序中实现 FIFO。