问题标签 [dup2]
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.
python - python中的dup、dup2、tmpfile和stdout
这是here的后续问题。
我想去的地方
我希望能够暂时将标准输出重定向到一个临时文件,而 python 仍然能够打印到标准输出。这将涉及以下步骤:
- 创建 stdout (
new
)的副本 - 创建临时文件 (
tmp
) - 将标准输出重定向到
tmp
- 告诉 python
new
用作标准输出 - 重定向
tmp
到“真正的”标准输出 - 告诉 python 再次使用“真正的”标准输出
- 阅读并关闭
tmp
执行
我尝试通过以下方式实现上述内容:
我想在这里休息一下来总结一下。
直到此处的控制台输出应为:
而sil
应该是这样的:['0.3\n']
. 所以直到这里,一切都像魅力一样运作。但是,如果我像这样再次重做上面的脚本:
发生错误,输出如下所示:
而sil
读取:['0.3\n', '']
。
换句话说:第二个Func("1.3", True)
无法写入临时文件。
问题
- 首先,我想知道为什么我的脚本不能像我希望的那样工作。意思是,为什么只能在脚本的前半部分写入临时文件?
- 我对 and 的用法还是有点
dup
疑惑dup2
。虽然我认为我了解将标准输出重定向到临时文件的工作原理,但我现在完全知道为什么os.dup2(new, 1)
要做它正在做的事情。也许答案可以详细说明我的脚本中的所有dup
和dup2
s 在做什么^^
unix - 你如何一起使用 dup2 和 fork ?
我正在学习操作系统课程,当你有分叉时,我很难用 dup2 重定向输入。我编写了这个小程序来尝试理解它,但我没有成功地将孙子的输出传递给孩子。我正在尝试模仿 unix 命令: ps -A | 厕所-l。我是 Unix 新手,但我相信这应该计算我得到的正在运行的进程列表的行数。所以我的输出应该是一个数字。
我在上面的代码中没有它,但这是我对事情应该如何进行的猜测:
- 我们需要重定向命令 ps -A 的标准输出(通常会打印到屏幕上,对吗?),以便 wc -l 命令可以使用它来计算行数。
- 可以使用 dup2 重定向此标准输出,例如 dup2(?, 1),这意味着将标准输出重定向到 ?。然后你关闭?
问题:我将它重定向到哪里?我知道它应该是文件描述符之一,但是应该将它重定向到哪里以便 wc 可以处理它?
- wc 以某种方式接收标准输出。
问题: wc 如何接收输出?通过 execlp 参数?或者操作系统是否检查文件描述符之一?
- 执行 wc -l。
其中哪一个是关闭并保持打开以便 wc 接收和处理 ps 的输出?我一直认为这需要倒过来考虑,因为 ps 需要将其输出提供给 wc ......但这似乎没有意义,因为孩子和孙子都是并行处理的。
c - 在C中关闭管道,dup2,文件描述符?
我正在运行一个做管道的程序。我要运行的命令是 ls | 猫。
当我运行代码时,命令 ls | cat 运行良好,只是 cat 没有结束(即管道没有关闭,只是等在那里什么都不做)。我认为这是因为我没有关闭流或其他东西,但我对 C/IO 不够熟悉,无法确定。我这样做对吗?
运行这个函数的代码就像
编辑:你说得对,致命错误,我在争论上打错了
thxs,看起来我只需要关闭父级中的管道 [1]
c - 如何正确使用 dup2/close 连接这三个进程?
我正在尝试正确连接三个进程以允许它们之间的进程间通信。我有一个进程,scanner,它获取父级的 STDIN,然后处理流中的单词。如果一个字长是奇数,它将它发送到一个进程,如果它是偶数,它将它发送到另一个进程。这些进程应该通过 STDIN(我假设)接收这些单词,然后通过 STDOUT 将一些信息输出回扫描仪进程。偶数/奇数的 STDOUT 应该重定向到扫描仪,然后扫描仪将读取(使用读取)然后输出/处理单词。这是一项学术练习,而不是实践练习。这是它的图片:
这是我的代码目前的样子。问题是我不确定要复制什么以及要关闭什么。一旦我弄清楚了,我应该好好去!任何意见,将不胜感激。
文件描述符:
代码:
c - 使用 dup2 使 C 程序执行诸如“ls /bin |”之类的命令时遇到问题 grep | grep b'
我在使用 dup2 使 ac 程序执行诸如ls /bin | grep grep | grep b
. 当我注释掉第三个命令和关联的管道时,它执行得ls /bin | grep grep
很好,但是使用最后一个命令它会立即返回。此外,当我输入“ps”时,进程仍在运行。我认为这是由于我关闭管道的方式。我的代码如下:
c - 使用 dup2 重定向标准输入和标准输出的未定义错误
我想使用管道重定向子进程的标准输入和标准输出。
目前我有以下代码:
但是,此代码不起作用,因为我不断收到
dup2 pipeOut:未定义错误:0
它最终陷入僵局。
我知道代码停止是因为父母一直在等待孩子的回答(永远不会到达),而孩子也一直在等待永远不会到达的输入。
我不明白为什么我不断收到这个错误。难道我做错了什么?
我正在开发 MacOS Lion 10.7.2 和 Xcode 4.2.1。
更新:在亚当罗森菲尔德的回答之后,我更正了我的 if 语句。但是,正如我所说,代码仍然停止(我只能阅读孩子打印的第一件事,Child: Parent Message
而没有其他内容)。
知道为什么会这样吗?
c - 通过 C 中的 pipe/dup2 向子进程发送命令
我正在尝试在我的树莓派上为 omxplayer 编写远程控制程序
我可以让 omxplayer 在子进程中正常运行,但我似乎无法让管道正常工作以实际向子进程发送命令。
当我使用 top 进行测试并运行程序时,我可以看到 top 输出出现在终端窗口中,并且我可以在窗口中看到 q 命令,但它看起来像是进入父进程而不是子进程。我是在管道上做错了什么,还是无法向生成的子进程发送命令?
我尝试将子 dup2 语句更改为从管道复制到标准输入
但随后 top 无法以失败的 tty get 消息开始
c - 为什么 dup2 可以在这里工作?
我从 APUE 得到了这个代码片段,
这会将所有输出、stderr 和 stdout 重定向到远程套接字,该套接字可通过 clfd 写入。
但那怎么行呢?您将两个 FD 重定向到一个。
linux - 使用 dup2 复制手动管道时出现无法解释的行为
我有两组代码都试图执行类似ls|grep pip
一个有效的和一个无效的。
工作代码创建了 2 个子进程,每个子进程使用一个子进程来执行一个命令,另一个简单地尝试通过创建一个子进程来执行此操作。即在说孩子和父母中的grep中执行ls。这似乎不起作用。而且我似乎也没有任何错误。
有人可以告诉我问题是什么吗?它为什么存在?
不工作:
以下是代码:
在职的:
fork - dup2 阻止 printf,但不阻止 fprintf?
因此,我为我的操作系统类分配了一项任务,其中我要创建一个与管道连接的进程环,以便在它们之间传递消息。我找到了一些示例代码,我希望根据我的需要调整(或至少理解)这些代码。示例代码(稍作修改)是:
输出:
当我给 2 作为 argv[1]
所以,我想知道,为什么 dup2 部分会阻止 printf() 执行?如果我什至不能打印某些东西,我不确定我是否可以正确传递消息。另外,为什么 fprintf() 已经在那里工作了,但我不会放在那里?
编辑:我会把这个带给我的教授/助教,但他们都在城外,从现在到截止日期之前都无法到达......