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

linux - 使用 fifos 和链接从网页控制远程进程 (Linux)

我在linux服务器中使用mpg123,我试图通过网页(apache)控制它,使用链接发送不同的控件。

mpg123 具有-C标志,因此您可以向其发送字符。"s" 键 = 开始/停止,"f" 键 = 下一首……等等。

我想我可以用 fifo 发送 mpg123 那些键,将 mpg123 标准输入更改为先进先出标准输出,但我不知道在这种情况下如何使用先进先出(如何让 mpg123 “听”到另一个标准输入)。我所做的是:

然后:

这不起作用。有人可以解释一下我可以使用 fifos 将消息传递给正在运行的 mpg123 吗?我用谷歌搜索了它,但找不到我想要的。

这个问题似乎给了我一些启示,但我仍然不知道如何让mpg123听fifo的输出。

先感谢您,

0 投票
3 回答
2553 浏览

c - 为什么 stat() 返回 EFAULT?

我正在编写一个程序,当从两个单独的 bash 会话作为两个单独的进程运行时,会在两者之间打开一个命名管道,以允许将字符串从一个发送到另一个。

当进程第一次从一个终端执行时,它会检查stat(fname, buf) == -1路径中的文件fname是否存在,如果不存在,则创建它。然后该过程假定由于它是制作 的那个FIFO,因此它将通过它发送消息并相应地继续。

之后,程序可以从另一个终端运行,该终端应该通过检查来确定它将是通过管道接收消息stat(fname, buf) == -1。条件现在应该返回 false,并且stat(fname, buf)它本身应该返回0,因为现在存在一个文件fname

但是由于我无法辨别的原因,当第二个进程运行时,stat(fname, buf)仍然返回-1。变量errno设置为EFAULT。该man页面stat()仅描述EFAULT为“错误地址”。任何帮助确定错误发生的原因或“错误地址”的含义。将不胜感激。

我已经验证该文件确实是由第一个进程按预期创建的。第一个进程在该行等待,因为它在另一端打开pipe = open(fname, O_WRONLY);之前无法继续。pipe

编辑:以下是我的代码的独立实现。我已经确认它编译并遇到了我在这里描述的问题。

0 投票
1 回答
165 浏览

unix - mkfifo 命令在 clearcase vobs 上失败

我正在尝试在 clearcase 的 vobs 树 (/vobs/something/something) 下创建但未签入的目录中创建命名管道。我收到此错误:

我无法理解为什么在创建其他文件时管道创建失败。我正在使用 Solaris 10。有什么方法可以在 vobs 中创建命名管道?

0 投票
0 回答
87 浏览

inter-process-communicat - 在 UNIX 环境中使用 FIFO 的 IPC

我正在尝试使用 FIFO 实现 IPC。发件人的代码如下..

接收器的代码如下..

我在两个终端窗口中运行这两个程序。我面临的问题是消息没有得到专心传递。假设我在发送者的窗口中键入一条消息,它不会出现在接收者的窗口中,除非我在发送者的窗口中键入下一条消息。我希望在按下返回键后立即传递消息。请帮忙!

0 投票
2 回答
7934 浏览

bash - 在 shell 脚本中使用 mkfifo

我试图用 FIFO 做一些简单的事情:读取行,但不是一次全部读取,而且它出乎意料地“不起作用”。

还行吧:

但如果我尝试逐行读取,第一次读取成功,第二次读取挂起。

有人可以解释一下吗?为什么我不能一个接一个地阅读所有 5 行?剩下的数据怎么了?


我发现如果我创建一个文件描述符来重定向 FIFO,我可以逐行读取:

我仍然不明白中间的情况。谁能解释一下?


版本信息:

0 投票
4 回答
5003 浏览

c - 无法打开FIFO

我写这个程序是为了在Ubuntu中测试FIFO。主程序创建一个子进程来写东西,然后父进程读取并打印它

但是,每次我执行时它都会显示这个,我确信fifo已经被装箱了。

0 投票
0 回答
326 浏览

fortran - 从命名管道读取(然后停止)

我试图让两个 fortran 程序通过命名管道进行通信,但读取程序挂起。我的命令如下所示:

wherefortw打印数字 1 到 10,'fortr' 像这样读取它们

它打印数字 1 - 6 然后挂起,所以我必须这样做fg才能C^C停止它。

如果我./app/fortrcat或等效的 c++ 程序替换,那么我会得到预期的数字 1 到 10,所以问题似乎出在阅读而不是写作上。但是,如果我从普通文件而不是 fifo 读取,则会./app/fortr给出预期的结果。

我是否应该期望能够让它发挥作用,所以,如何?

更新:

一个更简单的例子。如果 test 包含数字 1 到 10,则

打印数字 1 到 10

打印数字 1 到 6 并挂起

0 投票
1 回答
728 浏览

c - 使用 open 时会导致无限循环的原因是什么?(C,UNIX)

我用这个创建了一个先进先出:mkfifo("myfifo", 0666);
现在,我想用它打开它,inf fd = open("./myfifo",O_WRONLY);但这会让我进入一个无限循环,为什么?

0 投票
2 回答
11802 浏览

c++ - 使用 O_WRONLY 挂在 open() 上的 C++ Linux 命名管道

这是我的简单代码,它打开一个命名管道,向它写入一个字符串,然后关闭管道。管道是在另一个函数中创建的,如下所述。

但是对 open() 的调用挂起。我确保在调用时没有其他进程使用fifo“jobqueue”,并且队列创建后的文件权限设置为prwxrwxr-x(我只是mkfifo(ipcnm, 0777)用来创建管道。

起初我认为该组o缺少w该管道上的权限是一个问题,因此我使用 chmod 手动更改了它们,但它仍然挂起,因为“队列已打开”从未被打印出来。perror("open"); 的错误消息也没有。

我错过了什么?

0 投票
1 回答
1700 浏览

c - mkfifo() 不在 C 中创建文件

我正在尝试在 C 中创建一个命名管道,但没有任何成功。

这是我的代码:

所以在运行这个之后,我检查了目录,没有文件被创建。这是一些示例输出:

请帮忙 :)

更新 好的,我看到当路径设置为我的桌面时, ls -l 起作用了!但是当我尝试将其设置为当前目录(存储 main.c 的位置)时它不起作用。我尝试添加“/。” 和管道名称之前的“/”,都不起作用。