问题标签 [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.
linux - 使用 fifos 和链接从网页控制远程进程 (Linux)
我在linux服务器中使用mpg123,我试图通过网页(apache)控制它,使用链接发送不同的控件。
mpg123 具有-C标志,因此您可以向其发送字符。"s" 键 = 开始/停止,"f" 键 = 下一首……等等。
我想我可以用 fifo 发送 mpg123 那些键,将 mpg123 标准输入更改为先进先出标准输出,但我不知道在这种情况下如何使用先进先出(如何让 mpg123 “听”到另一个标准输入)。我所做的是:
然后:
这不起作用。有人可以解释一下我可以使用 fifos 将消息传递给正在运行的 mpg123 吗?我用谷歌搜索了它,但找不到我想要的。
这个问题似乎给了我一些启示,但我仍然不知道如何让mpg123听fifo的输出。
先感谢您,
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
编辑:以下是我的代码的独立实现。我已经确认它编译并遇到了我在这里描述的问题。
unix - mkfifo 命令在 clearcase vobs 上失败
我正在尝试在 clearcase 的 vobs 树 (/vobs/something/something) 下创建但未签入的目录中创建命名管道。我收到此错误:
我无法理解为什么在创建其他文件时管道创建失败。我正在使用 Solaris 10。有什么方法可以在 vobs 中创建命名管道?
inter-process-communicat - 在 UNIX 环境中使用 FIFO 的 IPC
我正在尝试使用 FIFO 实现 IPC。发件人的代码如下..
接收器的代码如下..
我在两个终端窗口中运行这两个程序。我面临的问题是消息没有得到专心传递。假设我在发送者的窗口中键入一条消息,它不会出现在接收者的窗口中,除非我在发送者的窗口中键入下一条消息。我希望在按下返回键后立即传递消息。请帮忙!
bash - 在 shell 脚本中使用 mkfifo
我试图用 FIFO 做一些简单的事情:读取行,但不是一次全部读取,而且它出乎意料地“不起作用”。
还行吧:
但如果我尝试逐行读取,第一次读取成功,第二次读取挂起。
有人可以解释一下吗?为什么我不能一个接一个地阅读所有 5 行?剩下的数据怎么了?
我发现如果我创建一个文件描述符来重定向 FIFO,我可以逐行读取:
我仍然不明白中间的情况。谁能解释一下?
版本信息:
c - 无法打开FIFO
我写这个程序是为了在Ubuntu中测试FIFO。主程序创建一个子进程来写东西,然后父进程读取并打印它
但是,每次我执行时它都会显示这个,我确信fifo已经被装箱了。
fortran - 从命名管道读取(然后停止)
我试图让两个 fortran 程序通过命名管道进行通信,但读取程序挂起。我的命令如下所示:
wherefortw
打印数字 1 到 10,'fortr' 像这样读取它们
它打印数字 1 - 6 然后挂起,所以我必须这样做fg
才能C^C
停止它。
如果我./app/fortr
用cat
或等效的 c++ 程序替换,那么我会得到预期的数字 1 到 10,所以问题似乎出在阅读而不是写作上。但是,如果我从普通文件而不是 fifo 读取,则会./app/fortr
给出预期的结果。
我是否应该期望能够让它发挥作用,所以,如何?
更新:
一个更简单的例子。如果 test 包含数字 1 到 10,则
打印数字 1 到 10
但
打印数字 1 到 6 并挂起
c - 使用 open 时会导致无限循环的原因是什么?(C,UNIX)
我用这个创建了一个先进先出:mkfifo("myfifo", 0666);
现在,我想用它打开它,inf fd = open("./myfifo",O_WRONLY);
但这会让我进入一个无限循环,为什么?
c++ - 使用 O_WRONLY 挂在 open() 上的 C++ Linux 命名管道
这是我的简单代码,它打开一个命名管道,向它写入一个字符串,然后关闭管道。管道是在另一个函数中创建的,如下所述。
但是对 open() 的调用挂起。我确保在调用时没有其他进程使用fifo“jobqueue”,并且队列创建后的文件权限设置为prwxrwxr-x(我只是mkfifo(ipcnm, 0777)
用来创建管道。
起初我认为该组o
缺少w
该管道上的权限是一个问题,因此我使用 chmod 手动更改了它们,但它仍然挂起,因为“队列已打开”从未被打印出来。perror("open"); 的错误消息也没有。
我错过了什么?
c - mkfifo() 不在 C 中创建文件
我正在尝试在 C 中创建一个命名管道,但没有任何成功。
这是我的代码:
所以在运行这个之后,我检查了目录,没有文件被创建。这是一些示例输出:
请帮忙 :)
更新 好的,我看到当路径设置为我的桌面时, ls -l 起作用了!但是当我尝试将其设置为当前目录(存储 main.c 的位置)时它不起作用。我尝试添加“/。” 和管道名称之前的“/”,都不起作用。