问题标签 [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.
c - Linux/C:将管道重定向到 STDIN/STDOUT
我在用 C 程序模拟 shell 脚本“env | grep HOME”时遇到了麻烦。我发现注释掉第 29 行解决了这个问题,但我不确定为什么!我在另一个问题上读到,这是因为 dup2() 正在关闭孩子的 fd,但手册页没有表明这一点。谁能给我一个明确的理由并帮助我理解这种行为?谢谢!
c - 我觉得好像 dup2() 是多余的
我的理解是,如果我有两个文件描述符
这两个功能:
和 -
实际上,将完成相同的任务。
dup2() 有返回值有什么意义?如果 dup2() 的返回值只是文件描述符,为什么要使用 dup2 如果你可以说:
很明显,我在这里缺少一些东西。
顺便说一句:请不要告诉我阅读手册页,或者我不拥有的书。那没有帮助。
c - 从 execvp 将标准输出写入文件
为什么 execvp 没有写入重定向的 STDOUT?我尝试在这个块中使用 printf() 作为测试,它准确地写入了它应该写入的位置,即我将 STDOUT 重定向到的文件中。
编辑:我更改了代码,并添加了 makesubcommand 的实现,并添加了一些调试消息。
继承人 makesubcommand(4):
这是一个测试运行:
c - Posix C 管道延迟
我遇到了一个棘手的问题:
假设我有一个程序,我们把它命名为 HelloProgram 代码很简单:
而且我还有一个程序,我们把它命名为Redirector,代码有点复杂:
那里没有说明一些错误检查,这是为了使代码更简单。我仍然无法理解这件事:
当 Redirector 与 HelloProgram 一起使用以重定向其输出时,所有“Hello”文本仅在 3 * 10(== 迭代次数)== 30 秒后才会显示到控制台屏幕,
这他妈到底是什么?我想它会是某种并行的,所以我每 3 秒后在控制台上显示每个“Hello”字符串。
请帮帮我。
c - 简单的 dup2 函数在 ubuntu 上不起作用
有人可以告诉我为什么 dup2 的这个基本实现不起作用。当我运行它时,输出不会被重定向,而是简单地打印在标准输出上。
c - dup2 - 创建管道程序
我想编写一个程序,最终将复制此功能
程序1 | 程序 | 程序X
所以我想将programX的输出重定向到programX+1的输入。
为了简单起见,我只想从两个程序和一个管道开始。
在伪代码中,我的方法如下所示:
到目前为止一切顺利,这是我目前拥有的:
这几乎实现了我想要做的事情,但是 child2 中的输出似乎再次写入管道并导致写入自己的管道。我认为,我在这里可能完全错了,(尽管在 child2 中关闭了写入端)它通过 printf 写入自己的管道(因为我将 STDOUT 重定向到管道的写入端)并再次读取。所以输出看起来像这样
当我使用参数运行程序who
时sort
myProg 谁排序
我得到以下输出:
缓冲区 = 缓冲区 = martine****** 控制台 4 月 24 日 12:59
编辑:
如何在 execvp("sort", argsArr); 中设置排序命令的输入 ? sort 通常需要一个文件名,那么我该怎么做呢?
c - 使用 dup2 时的竞争条件
这个dup2
系统调用的手册页说:
EBUSY(仅限 Linux)这可能由 dup2() 或 dup3() 在与 open(2) 和 dup() 的竞争条件下返回。
dup2
它谈论什么竞争条件,如果EBUSY
出现错误我该怎么办?我应该重试EINTR
吗?
c - 带有多个子进程的C读写
从 C 中的父进程,我正在运行 3 个子进程,每个子进程都执行一个程序。
- 程序 1 获取标准输入(用户输入)并将其打印到标准输出。
- 程序 2 获取标准输入(应该来自程序 1),对其进行修改并打印到标准输出。
- 程序 3 获取标准输入(应该来自程序 2),修改它并打印到标准输出
我得到程序 3 的输出,但程序 2 的修改没有显示。
以下是父级的相关代码:
这些程序使用 fgets 和 printf 进行读/写。
我检查了以前的问题,但我无法找出我做错了什么。有任何想法吗?
c - dup2() 在 C 中做了什么
我在手册页中查找了它,但我仍然不明白...
假设你有dup2(f1,0)
。是否使用标准输入切换filedesc.1然后锁定标准输入?
c - 使用 dup2 将 stdout/stderr 重定向到同一文件时出现问题
我dup2
在尝试将两者都重定向stdout
到stderr
同一个输出文件时遇到了一些麻烦。
我正在使用这个解释性代码示例:(gcc 4.8.2,Ubuntu 14.04)
USE2FILES 宏应该在使用 2 个文件描述符(到同一个文件)之间切换,它们分别被复制到stdout
和stderr
或 1 个文件描述符被复制到stdout
和stderr
.
我的印象是使用 2 个不同的文件描述符进行重定向应该可以工作。但是,使用 USE2FILES 运行这段代码会在以下输出test.out
:
如果我然后禁用 USE2FILES 我得到:
似乎在第一种情况下没有输出stderr
通过。这种行为是否可以预料(我错过了什么)?
编辑:接受克里斯多德的回答后:这确实是一个糟糕的例子。将序列更改为fprintf
如下所示:
得到我这个test.out
输出:
显示得很清楚stdout
,stderr
并且正在与他们在同一个文件上的写入竞争。