dup2相关内容

程序在管道上卡住(EXEC%ls grep排序)

我正在尝试编写一个程序,该程序执行以下命令,使用管道并接受两个参数DIR(目录)和arg(文件类型,示例:jpg),将一个命令的输出连接到下一个命令的输入。 ls目录-Lar|grep参数|排序 代码如下: int main(int argc, char *argv[]) { if (argc != 3) { printf("Invalid argume ..
发布时间:2022-06-30 22:24:27 服务器开发

玩具外壳管道不正确

我不会撒谎.这是一道作业题.然而,就我而言,这些点都不见了,宝贝不见了.现在,我只是在寻找答案,因为我-认为-我可能疯了. 这个程序的目标是执行命令 ps -A |grep (输入字符串) |wc -l 的方式与 shell 的工作方式类似.因此,我生成了这些进程,并让它们相互等待.最新的进程,曾孙进程,execlp("ps","ps","-A",NULL) 将自身替换为 ps -A 进程. ..
发布时间:2022-01-02 19:08:56 C/C++开发

使用 dup 后恢复标准输出

使用 fork 我创建了一个孩子,在孩子中我使用 execl 执行 ls 命令.为了将输出发送给父级,我使用了 pipe 和 dup.然后父级打印输出.该代码给出了预期的输出,但是当我尝试恢复最初保存在 stdout_holder 中的 stdout 时,终端上没有打印任何内容(当我使用 printf("hello") 或它下面的 execl 语句).然而,经过几次观察,观察到 hello 仅在第 ..
发布时间:2021-08-30 19:09:58 其他开发

popen2() 在 c 中如何工作?

我正在尝试使用管道、叉和 dup 在我的程序中执行 md5sume 命令.我发现 sum 代码成功运行,但我无法理解某些代码行.这是我的代码: int infp, outfp;字符缓冲区[128];如果 (popen2("md5sum", &infp, &outfp) ..
发布时间:2021-06-18 18:31:20 其他开发

僵尸进程和叉子

我有这样的代码... c = fork();if(c == 0){close(fd [READ]);如果(dup2(fd [WRITE],STDOUT_FILENO)!= -1)execlp("ssh","ssh",host,"ls",NULL);_exit(1);}close(fd [WRITE]); fd [READ]和fd [WRITE]是管道文件描述符. 当我连续运行它时,当 ..
发布时间:2021-05-09 18:33:48 C/C++开发

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

前一段时间,我使用pthread为“餐饮哲学家问题"编写了一个C程序,现在正尝试将其更改为使用fork().这是我已经通过的演讲的练习.但是一个朋友向我求助,我似乎无法自己解决,这让我发疯了! 如果我执行"ps",则过程在那里.但是没有任何输出到stdout,所以我认为管道做错了. #include#include#include ..
发布时间:2021-05-09 18:33:38 其他开发

当您对与dup2()复制的管道文件描述符调用close()时,会发生什么情况?

我对Unix和C编程中的文件描述符有疑问. 假设我使用 pipe(fd)来获取文件描述符3和4的管道端,3连接到读取端,4连接到写入端. 现在,我在处理过程中使用 dup2(fd [write_end],1)将写入端的描述符(为4)复制到文件描述符1.如果我现在执行 close(fd [write_end]),它将关闭描述符1或描述符4吗? 解决方案 成功调用 dup2 后,两 ..
发布时间:2021-05-07 18:57:41 其他开发

复制,但仍使用stdout

使用dup2(或fcntl)是否可以执行一些魔术操作,以便将stdout重定向到文件(即,写入描述符1的所有内容都将进入文件),但是如果我使用了一些其他机制,它将去终端输出吗?太松散了: int original_stdout; // some magic to save the original stdout int fd; open(fd, ...); dup2(fd ..
发布时间:2020-11-05 22:12:17 服务器开发

使用execvp在输出重定向期间接收错误代码

我正在尝试将输出从ls重定向到文件,该文件在C语言中创建的外壳中.我键入: ls > junk 我得到的是: ls: cannot access >: No such file or directory 然后,如果我使用CTRL-D退出外壳程序,则会在退出之前将ls命令的结果打印到屏幕上.我试图使用打印语句找出发生的地方,并且在以下情况下没有打印打印语句: dup2(f ..
发布时间:2020-06-12 19:35:22 其他开发

在fork()之后将stdout重定向到文件

我正在一个简单的shell上工作,但是现在我只是想了解重定向.我只是对ls命令进行硬编码,现在尝试将其写入文件.当前,ls运行,并且创建了输出文件,但是输出仍然转到stdout,并且该文件为空白.我对为什么感到困惑.预先感谢. 这是我的代码: int main() { int ls_pid; /* The new process id for ls*/ char *co ..
发布时间:2020-06-12 19:35:20 其他开发

从python重定向stdout进行C调用

这是来自此处的后续问题,专门针对其 从python模块中,我正在调用 Hello World 可执行文件,该可执行文件仅将Hello World打印到标准输出.我有兴趣将输出重定向到python StringIO并遇到此答案,这几乎使我一路走到解决方案. 此答案的关键部分是以下代码段: 1. def redirect_stdout(): 2. print "Redirecti ..
发布时间:2020-06-12 19:35:16 Python

Linux/C:将管道重定向到STDIN/STDOUT

我在用C程序模拟shell脚本"env | grep HOME"时遇到了麻烦.我发现注释掉第29行可以解决此问题,但是我不确定为什么!我读到另一个问题,这是因为dup2()正在关闭子级中的fd,但手册页并未指出这一点.谁能给我一个明确的理由并帮助我理解这种行为?谢谢! #include #include #include #inc ..
发布时间:2020-05-28 00:36:13 服务器开发

从stderr重定向到另一个文件描述符

我的程序调用打印到stderr的库函数.我想进行干预,以便将对文件描述符2的所有写调用都发送到其他地方. 这是我的第一次尝试: bool redirect_stderr (int fd) { return dup2 (2, fd) > 0; } 在这里,从open("/foo/bar",O_APPEND|O_CREAT) 成功获得了fd 此函数返回true后,std:: ..
发布时间:2020-05-28 00:03:22 服务器开发

python:multiprocessing.Pipe和重定向标准输出

我正在使用multiprocessing包产生第二个进程,我想从中将stdout和stderr重定向到第一个进程.我正在使用multiprocessing.Pipe对象: dup2(output_pipe.fileno(), 1) 其中output_pipe是multiprocessing.Pipe的实例.但是,当我尝试另一端阅读时,它只是挂起了.我尝试使用Pipe.recv_bytes ..
发布时间:2020-05-13 20:15:35 Python

使用dup2时的竞争状况

针对dup2系统调用的此联机帮助页说: EBUSY(仅Linux)在执行下列操作时可能由dup2()或dup3()返回 open(2)和dup()的竞争条件. 它讨论什么种族条件?如果dup2给出EBUSY错误,我应该怎么办?我是否应该像EINTR那样重试? 解决方案 fs/file.c中有一个解释,/* * We need to detect attempts to do d ..
发布时间:2020-05-01 10:57:46 服务器开发

管道,dup2和exec()

我必须编写一个可以运行管道的外壳.例如ls -l | wc -l“之类的命令.我已经成功解析了用户给出的命令,如下所示: "ls" = firstcmd “-l" = frsarg "wc" = scmd “-l" = secarg 现在我必须使用两个fork,因为命令分别是两个和一个管道. 我为执行命令编写的代码块如下: pid_t pid; int fd[2 ..
发布时间:2020-05-01 08:23:06 服务器开发

在C中创建外壳.如何实现输入和输出重定向?

我正在用C创建外壳程序,我需要实现输入和输出重定向的帮助. 当我尝试使用“>"创建文件时,我收到一条错误消息,指出该文件不存在.当我尝试做ls> test.txt之类的东西时;它不会创建一个新文件. 我使用提供给我的建议更新了代码,但是现在我遇到了不同的错误.但是,仍然没有为输出重定向创建新文件. 这是我的完整代码: #include #include ..
发布时间:2020-04-23 10:40:23 服务器开发

玩具外壳不正确

我不会撒谎。这是一个家庭作业问题。然而,就我而言,点已经走了宝宝走了。现在,我只是寻找一个答案,因为我 - 我可能是疯了。 这个程序的目标是执行命令 ps -A | grep(inputstring)| wc -l 的方式类似于shell如何做。所以,我产生的进程,让他们互相等待。最新的进程,大孙子 execlp(“ps”,“ps”,“ - A”,NULL) ps -A 进程。在它之前 ex ..
发布时间:2016-10-14 11:32:16 C/C++开发