问题标签 [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.
c - Wait() 导致程序在打开 FIFO 命名管道时暂停
每当我使用等待功能时,我的代码都会在 open() 上暂停,没有它,程序将无法工作。没有错误代码,但我想知道出了什么问题。
代码最终将是 controller.c 将打开 c1,c2,c3。它将等待 c1 获得输入并将其放入管道,然后将其转到 c2 将其打印,然后 c3 将以不同的格式打印它。
C1:
C2:
该程序将打开 c1,打印 TEST,然后在我手动退出之前什么都不做。
c - FIFO流水线服务器只接收一定数量
所以我正在尝试使用 mkfifo() 在 C 中实现一个基本的 FIFO 管道。到目前为止,这是我的代码类:
主.c:
客户端.c:
服务器.c:
现在管道正在工作,但由于某种原因,服务器只接收到部分消息。例如,如果我们从协议中获得以下字符串:“HELLO WORLD”,我们将获得以下输出:
服务器应该收到整个消息,但事实并非如此。我究竟做错了什么?感谢您的任何帮助!
python - 在python中使用FIFO进行输入和输出
为了与一个启动一次并在单独进程中运行的 shell 通信,我使用了Popen
from subprocess
.
和shell.py
所以调用test()
给出以下结果
问题
为什么只打印第一行?如何打印所有行?
此外,我不确定 FIFO 的正确使用。也许有更好的方法来完成这项工作。我愿意接受任何建议。
使用p
调用对我p.stdin.write()
来说p.stdout.readline()
不是解决方案,因为我必须在没有实例的情况下从 javascript 调用函数p
。
linux - 日志 mkfifo:必须指定文件
我们在 ksh 文件中有这个 sript。
有时它正在工作。有时不是,也没有错误或警告,只是一个日志
我在互联网上搜索,但没有找到关于 mkfifo 消息“必须指定文件”的任何内容。而且它肯定在我们的代码库中没有该消息。我不确定这是警告还是什么。有没有人有任何关于 mkfifo 消息的信息(文档,...)?
我在这里找到了一些关于 mkfifo 的信息,在此处输入链接描述,但没有关于错误消息的信息。
EDIT1:我们在该脚本之前有许多运行正常的脚本。因此,FOLDER 不可能有空间。有没有人有任何资源涉及 mkfifo 的消息“mkfifo:必须指定文件”?
c - 命名管道如何识别客户端
假设我有一个根据请求创建验证码图像的服务器。
客户端通过具有 6 个聊天词和一个 ID 的命名管道与服务器通信。
服务器创建图像并通过命名管道将其发送给客户端。
客户端具有函数 create_captcha_files(const char* word) 与服务器通信并获取结果并保存在 word.png 文件中。
服务器有一个已经实现的函数 size_t captcha(const char* word, char * buffer) 将相应的图像写入缓冲区,返回最大为 16384 字节的写入字节数。
所以客户端是这样的:
和服务器:
windows - 将主机目录挂载为网络共享时,babel-watch 在 Windows 主机上的 docker 容器中不起作用
我在 Windows 上使用 docker,并且我的 src 目录作为网络共享安装在 docker 容器内(而不是 COPY)。所以/var/app/server
在 docker 内部实际上是一个网络共享,它在我的主机上的实际位置是C:\...project\server
. [旁注,我不熟悉 docker 在 linux 上的工作方式,就像它仍然使用网络共享在 linux 上挂载一样吗?因为如果不是,那么这可能只是 Windows 问题]
我正在使用使用 的 babel-watch mkfifo
,并且由于它在 docker 容器 (VM) 中运行,因此 mkfifo 无法在该网络共享目录中创建文件管道。[旁注:babel-watch 实际上确实可以在 docker 外部的 Windows 上使用 cygwin 运行,该 cygwin 具有 mkfifo.exe 实用程序]
有什么解决方法吗?
我尝试编辑 babel-watch 源以让 mkfifo 在其中创建一个文件,/var/app
或者/var
改为(它仍然在 docker 容器的领域内),虽然这种方式mkfifo
确实有效,但 babel-watch 看不到文件更改。我想从根本上说,文件更改信息无法通过网络共享屏障/var/app/server
(挂载点)传播到/var/app
(docker内的真实目录)。
ios - 是否可以在 iOS 中创建和使用 FIFO 文件?(对象)
我想使用良好的旧 FIFO 将数据传递到我自己的iOS 应用程序的另一部分。我查看了 dispatch_io_create_with_path,但我希望对方能够使用普通的 read() 读取数据。是否可以使用 FIFO 文件?如何?
我在 Xcode7 ObjC 中尝试了下一个代码(指向 Documents dir + filename 的路径):
mkfifo() 返回 0 但 open() 失败并返回 -1。有趣的是,如果我尝试使用 'O_RDONLY' 的 open() 程序正在等待,那么那里正在发生一些事情..
c - 命名管道未按预期工作。一遍又一遍地阅读相同的消息
我正在尝试使用命名管道在进程之间进行通信。它的行为不像预期的那样,它一次又一次地阅读相同的消息。
过程1:(创建一个管道,并开始阅读,直到它读完或它读到100条消息)
进程 2(写入同一管道)
进程 1 的输出(有时为 Hi1,有时结束
两个进程的 fd 都是阻塞的。有人可以解释一下为什么过程 1 一次又一次地阅读一些消息吗
linux - Linux shell 使用管道包装程序的标准输入和标准输出
所以,我有这个交互式程序,它在没有屏幕的嵌入式 linux ARM 平台上运行,我无法修改。为了与之交互,我必须通过 ssh 进入嵌入式 linux 发行版,并运行该程序,该程序是某种带有内置命令的自定义命令行,它不会退出,只有 SIGINT 会退出程序。
我试图通过让它在后台运行并通过发送像这样的 SSH 命令使用管道与它通信来自动化它ssh user@host echo "command" > stdinpipe
。这部分有效,我在 shell 脚本中提供了一个这样的示例(我不能使用 bash,我只在机器上安装了 ash):
我现在可以通过像这样写入管道轻松地命令程序
它输出终端内的所有内容。问题是,虽然如果我打开了一个 SSH 会话它可以工作,但如果我只像我之前所说的那样逐个发送命令(我在 python 中使用 paramiko 和该exec_command()
方法,以防万一,但我没有'认为这无关紧要,我可以使用invoke_session()
但我不想处理recv()
)
所以我想我会将程序的输出重定向到管道。这就是问题出现的地方。我的第一次尝试是这个(请忽略所有内容都以root身份运行并存储在根主文件夹中的事实,这就是我得到它的方式,我现在没有时间让它更干净,而且我不是一个管理软件):
仅此一项就在终端本身内起作用。现在,如果我让 SSH 会话保持打开状态并打开另一个终端并键入ssh root@host "echo command > /root/binary/inpipe"
代码,则会执行该代码,但随后它将我刚刚键入的命令及其结果输出到另一个保持打开状态的终端。所以这显然不是一个选择,我必须以某种方式捕获输出。
如果我更改./command_bin &
程序./command_bin >outpipe &
永远不会启动,我不知道为什么,我知道因为$command_pid
是空的,我无法找到进程ps -A
现在,如果我替换/proc/${command_pid}/exe < inpipe 2>&1 &
为/proc/${command_pid}/exe < inpipe &>outpipe &
程序启动,我可以在脚本完成运行时写入 inpipe echo "command" > inpipe
,但是如果我尝试任何一个cat < outpipe
,tail outpipe
它只会挂起,并且什么也不做。我nohup
在启动命令时尝试过使用,但它并没有真正帮助。我还尝试使用普通文件而不是 fifo 来重定向输出,但结果完全相同。
我花了一整天的时间在这件事上,但我无法让它工作。为什么这不起作用?另外我可能只是使用一种糟糕的方式来做到这一点,还有其他方法吗?这里唯一需要做的是我必须通过 ssh 连接到开发板,并且命令行实用程序必须保持打开状态,因为它正在与板载设备通信(使用 I2C、OneWire 协议等)。
为了简单起见,我希望能够随时写入程序的标准输入,让它的标准输出到其他地方(一些文件,缓冲区,我不在乎),我可以在任意时间后轻松检索cat、tail 或其他带有 ssh 的命令。
c - 在 C 中使用管道的命名管道块子进程
child_filter 必须从 pipefd 读取值并将这些值写入命名管道。问题是,如果我尝试取消注释注释 [3](命名管道的打开),该函数将不会打印值,它似乎卡在 read() 调用上。相反,如果我不打开 fifo 管道,它就可以工作。我需要其他东西的命名管道。我要修改什么?也许管道和命名管道一起使用它们会发生冲突?谢谢。