问题标签 [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.

0 投票
0 回答
1692 浏览

c - 使用管道 dup2 - c 语言执行多个命令

我有一个执行 bash 命令的小 C 程序(一种 shell 程序)。

当用户发送这样的命令时:

  1. ls -l | grep .[c,h]$ | wc -l

  2. ls

  3. 回声 | ls

我决定使用链表数据结构,这是执行的功能

到目前为止,这段代码以不可预知的方式工作,对于单个命令它的工作,对于薮猫有时它工作,有时不......在这段代码上花了很多时间,谷歌根本没有帮助!

几点注意事项:

  1. 当用户发送命令时,例如:

回声|ls|123

返回码将是 COMMAND_ERROR 宏定义,并且应该是这样的错误信息:

123:找不到命令

但不知何故,我的代码会执行 'echo | ls' 并显示前 2 个命令的输出,之后将显示 '123' 命令的错误消息。同样对于一些错误的命令 - 它应该只显示它​​找到的第一个错误消息,并且它不应该继续执行下一个命令......

对于这个命令:

ls -l | grep .[c,h]$ | wc -l

它似乎在无限循环中放养......

  1. 命令 *c 保存链表,链表中的每个节点将是一个命令,每个节点将保留数组调用参数,数组调用参数保留命令的所有参数。示例:

回声 1234 | ls /家

我希望我很清楚并很好地解释了我的问题。非常感谢!

0 投票
2 回答
1458 浏览

c - C 编程 2 个管道

我想在我的程序中设置 2 个管道。我有 1 个管道工作正常,但我不知道在哪里放置第二个管道。

我的设置的伪代码如下所示,

这是带花括号的,对此感到抱歉

第二个管道的位置错误或代码完全错误。

有什么建议么?

0 投票
1 回答
403 浏览

c - 对 dup2 使用排序

我正在 linux 中试验这个 dup2 命令。我编写了如下代码:

我希望这个程序的行为如下:它应该分叉一个孩子并用排序过程替换它的图像。并且由于 stdin 和 stdout 被 dup2 命令替换,我希望 sort 从管道读取输入并将输出写入由父级打印的另一个管道。但是排序程序似乎没有读取任何输入。如果没有给出命令行参数,sort 从标准输入读取它对吗?有人可以帮我解决这个问题吗?

非常感谢!

0 投票
3 回答
1035 浏览

c - 关闭文件描述符然后使用它

下面是解释 dup2 系统调用的代码段。我不明白的是,在复制了两个文件描述符之后,为什么我们需要关闭旧的文件描述符。由于“out”描述符现在已关闭,发送到 stdout_fileno 的消息如何也被写入“out”。请注意,代码不是我写的。

0 投票
1 回答
8578 浏览

c - 使用 fork() 在 C 中用餐哲学家

前段时间,我使用 pthread 为哲学家就餐问题编写了一个 C 程序,现在正尝试将其更改为使用 fork()。这是我已经通过的讲座的练习。但是一个朋友向我寻求帮助,我似乎无法自己弄清楚,这让我发疯了!

如果我做一个“ps”,那么进程就在那里。但是标准输出没有任何输出,所以我认为我在管道上做错了。

预先感谢您的任何帮助。

0 投票
1 回答
11405 浏览

c - 使用 Dup2 重定向输入和输出

我一直在用 C 编写一个 Unix shell,我正在尝试实现输入和输出重定向。我一直在使用 Dup2 并且能够做到这一点,因此我的输出重定向到一个文件,并且我的输入也被正确重定向。但是,在我完成之后,如何再次使用 Stdin 和 Stdout?

这些是我在需要重定向时运行的代码:

在:

出去:

0 投票
1 回答
1034 浏览

c - C中的多管(孩子们不要停止阅读)

我正在尝试在 C 中实现多管道,以运行多个命令,如 shell。我已经创建了一个链接列表(在我的代码中称为 t_launch),如果您键入“ls | grep src | wc”,它看起来像这样:

wc -- 管道 -- grep src -- 管道 -- ls

每个 PIPE 节点都包含一个来自 pipe() 函数的 int tab[2](当然,每个 PIPE 节点都有一个 pipe() 调用)

现在我正在尝试执行这些命令:

但这不起作用:看起来命令不会停止阅读。例如,如果我输入“ls | grep src”,“src”将从 grep 命令中打印出来,但 grep 会继续读取并且永远不会停止。如果我输入“ls | grep 源代码 | wc”,没有打印出来。我的代码有什么问题?谢谢。

0 投票
1 回答
872 浏览

unix - 在 dup2 和 Unix 中的管道代码中重定向输出的困难

我是unix新手。在下面的代码中,我从命令行“~$ foo last sort more”传递了三个参数,以复制“~$ last | sort | more”。我正在尝试创建一个需要三个参数的程序(现在至少 3 个)。父进程将分叉三个进程。第一个进程将写入管道。第二个进程将从管道读取和写入,第三个进程将从管道读取并写入标准输出(终端)。第一个进程将执行“last”,第二个进程将执行“sort”,第三个进程将执行“more”,进程将休眠 1,2 和 3 秒以进行同步。我很确定我在创建管道和重定向输入和输出时遇到了麻烦。我不 没有任何输出到终端,但我可以看到进程已经创建。我会很感激一些帮助。

0 投票
0 回答
256 浏览

c++ - dup2() 提前终止子进程

我正在编写 ac 程序来实现多个管道,但由于 dup2 提前终止子进程而遇到了麻烦。这是我的代码:

当我运行命令时,我得到的输出是第一个命令的结果,然后程序终止而不执行管道中的其余命令。

dup2关于为什么会导致我的子进程过早终止的 任何想法?

0 投票
2 回答
586 浏览

c++ - 玩具外壳管道不正确

我不会撒谎的。这是一个家庭作业问题。然而,就我而言,这些点都不见了,宝贝不见了。现在,我只是在寻找答案,因为我 - 认为 - 我可能疯了。

该程序的目标是以ps -A | grep (inputstring) | wc -l类似于 shell 的方式执行命令。因此,我生成了这些进程,并让它们相互等待。最新的流程,曾孙,execlp("ps","ps","-A",NULL)它用ps -A流程代替了自己。在它之前execlp,我确保它的标准输出将进入管道输出。行中的下一个进程是wait()ing,并且已经自行设置,以便输入管道进入标准输入,标准输出进入输出管道,它将执行 grep,依此类推。

我几乎可以肯定我已经正确设置了它。然而……程序确实如此。不是。工作。

编辑:更改为我的代码的两管变体。