pipe 相关问题

Unix管道连接两个进程的文件描述符。使用在<unistd.h>中声明的POSIX pipe()函数创建管道。 Shell使用“|”在进程之间提供管道创建。也可以使用CreatePipe()在Windows上创建管道。这个概念可用于将标准输入,标准输出和标准错误可移植地重定向到.net和Java语言中的调用过程。

丢弃命名管道的缓冲区

我正在从命名管道中读取数据以与其他进程进行通信。在某些情况下,我需要丢弃命名管道中的缓冲输入,然后继续读取新输入。 我想出了...

回答 1 投票 0

在nodejs中构建CLI工具,看不到子进程输出

我正在节点中构建命令行工具,作为该工具的一部分,我需要执行系统中的命令。 问题是我没有从子进程中获得管道输出,我

回答 2 投票 0

在简单的 shell 程序中实现命令管道的问题

我正在用 C 语言编写一个非常简单的类似 bash 的 shell,目前正在命令之间实现管道(即 command1 | command2,它应该使用...的标准输出同时运行这两个命令)

回答 1 投票 0

使用管道跨子进程通信

我的任务是用 c 创建我自己的 shell。我将使用 fork()、pipe()、exec() 和 wait() 来实现此目的。我有一个良好的开端,但我对管道的研究越多,我就越困惑。

回答 1 投票 0

使用管道作为CreateProcess的输入/输出; ReadFile 块程序

我想编写一个执行cmd或powershell命令的程序。 为了实现这一目标,我使用 CreateProcessA 创建一个进程,并使用管道作为输入/输出。 我的代码工作正常,但在命令之后......

回答 1 投票 0

从 python 控制台使用 grep

使用python我怎样才能做到这一点? python_shell$> 打印 myPhone.print_call_log() |正则表达式555 我见过的唯一接近的是使用“ipython console”,将输出分配给

回答 3 投票 0

在 Windows 上通过 stdin 将字节从 Python 传递到 C++ 子进程失败

我有一个运行循环迭代的Python程序。在循环期间,有一部分代码可以并行运行,为此,我决定使用我已预编译的 C++ 程序......

回答 1 投票 0

我们可以关闭文件描述符3和4吗?我遇到了麻烦

我在管理 C 程序中的文件描述符方面面临挑战,特别是在 Pipex 项目的上下文中。程序退出后,Valgrind 报告有 5 个文件描述符打开,其中 3 个...

回答 1 投票 0

我们可以关闭文件描述符4和5吗?我遇到了麻烦

我在管理 C 程序中的文件描述符方面面临挑战,特别是在 Pipex 项目的上下文中。程序退出后,Valgrind 报告有 5 个文件描述符打开,其中 3 个...

回答 1 投票 0

如何捕获 shell 管道中的错误代码?

我目前有一个脚本可以执行类似的操作 ./a | ./b | 。/C 我想修改它,以便如果 a、b 或 c 中的任何一个退出时出现错误代码,我会打印一条错误消息并停止,而不是管道错误...

回答 6 投票 0

如何用jq改变null/boolean/number的颜色?

通过管道传输到 jq,我得到如下输出: 有没有办法改变 null/boolean/number 的颜色? 就像是: 导出jq_int_color=黄色 导出 jq_bool_color=红色 导出 jq_null_color=黑色

回答 1 投票 0

如何参考本地和上级LHS

下面有没有办法在expr中同时引用expr1和expr2? expr1 %>% { expr2 %>% 表达式 } 例如,这不起作用 mtcars %>% { mtcars[1:3] %>% 变异(disp2 =

回答 1 投票 0

使用 bash,如何将标准错误传输到另一个进程?

众所周知,如何将一个进程的标准输出传输到另一个进程的标准输入中: 过程1 |过程2 但是如果我想将 proc1 的标准错误发送到 proc2 并离开标准怎么办...

回答 6 投票 0

posix_spawn 和管道(stdin、stdout、stderr),不一致错误

阅读手册页和几个 stackoverflow/stackexchange 页面,我正在研究 posix_spawn 和管道。然而,我遇到了一个问题。 以下代码,三个管道(stdin、stdout、stderr)看起来可以工作......

回答 1 投票 0

如何让catchError返回网络错误?

这曾经工作得很好,但 throwError 已被弃用,现在 catchError 似乎不再返回我过去收到的网络错误。 this.goToApi().subscribe(响应 => { 安慰...

回答 1 投票 0

进程之间重定向输出和输入流的问题

我正在用c写一个类似管道的东西。当有多个“|”时,它会崩溃而其他进程必须读取前一个进程的输出。 #定义_GNU_SOURCE #包括 #包括...

回答 1 投票 0

如何在“file-with-patterns”频繁变化的管道中使用“grep -f file-with-patterns”?

我正在尝试动态记录已删除的防火墙事件,从而可以动态指定不记录哪些事件。 我用: 日志读取-f | grep -v -f 带模式的文件 >> 日志文件 在脚本中

回答 1 投票 0

如何从 Rust 进程内部重定向 stderr?

我正在尝试从进程内部重定向 Stderr 文件描述符,但似乎没有它的实现,并且我没有看到从 C/C++ 到类似于 dup2 的任何内容的明确路线。 我...

回答 2 投票 0

Linux 中的命名管道与 Python 读/写丢失了一些文本行

我正在学习如何使用命名管道在进程之间传递数据。为了对其进行测试,我编写了两个 Python 脚本,分别称为 pipelinewriter.py 和 pipelinereader.py,以及一个名为 my_pipe 的命名管道(使用

回答 1 投票 0

popen() 的输出与执行“sh -c cmdstring”不同

描述 我测试了APUE(UNIX环境中的高级编程,3ed)、15.3 popen和plcose函数的示例。 示例代码如下 #include“apue.h” #包括 描述 我测试了APUE(UNIX环境中的高级编程,3ed)、15.3 popen和plcose函数的示例。 示例代码如下 #include "apue.h" #include <sys/wait.h> #define PAGER "${PAGER:-more}" /* environment variable, or default */ int main(int argc, char *argv[]) { char line[MAXLINE]; FILE *fpin, *fpout; if (argc != 2) err_quit("usage: a.out <pathname>"); if ((fpin = fopen(argv[1], "r")) == NULL) err_sys("can't open %s", argv[1]); if ((fpout = popen(PAGER, "w")) == NULL) err_sys("popen error"); /* copy argv[1] to pager */ while (fgets(line, MAXLINE, fpin) != NULL) { if (fputs(line, fpout) == EOF) err_sys("fputs error to pipe"); } if (ferror(fpin)) err_sys("fgets error"); if (pclose(fpout) == -1) err_sys("pclose error"); exit(0); } 我的输入文件是“temp.in”,我们有 $ cat temp.in test sentence 示例的输出如下 $ ./popen2 temp.in test sentence 问题 如 APUE 中所示,执行 fpout = popen(cmdstring, "w") 类似于其子进程执行 sh -c cmdstring。因此,上一节中显示的代码 popen 应该执行 sh -c "${PAGER:-more} test sentence" 我的操作系统(Ubuntu 22.04.3 LTS)没有名为 PAGER 的环境值,因此它应该执行 sh -c "more test sentence" 但是,据我所知,命令more的选项应该是文件名。在我的系统中测试以下顺序并获得输出,这与我上面推断的不同: $ ${PAGER:-more} temp.in test sentence $ ${PAGER:-more} test sentence more: can't open test: no such file or directory more: can't open sentence: no such file or directory 我的推论有什么问题吗? 好了,popen()的逐步工作原理如下(我们忽略一些不相关的检查): 第一:货币进程调用pipe()创建管道 int pfd[2]; pipe(pfd); 第二:当前进程调用fork()创建子进程。 if (fork() == 0) /* child process work */ else if(fork() > 0) /* parent process work */ 第三:子进程和父进程关闭自己的fileno以创建单向管道。编辑popen(cmdstring, "r"),父进程关闭其写文件号,子进程关闭其读文件号。 /* child process work */ close(pfd[0]); // pfd[0] is read port /* parent process work */ close(pfd[1]); // pfd[0] is write port 第四:父进程和chile进程重定向自己的fileno。编辑popen(cmdstring, "r"),父进程将其 STDIN_FILENO 重定向至读端口,子进程将其 STDOUT_FILENO 重定向至写端口。 /* child process work */ dup2(pfd[1], STDOUT_FILENO); close(pfd[1]); /* parent process work */ dup2(pfd[0], STDIN_FILENO); close(pfd[0]); 然后,子进程可以将其输出写入管道,父进程可以通过其标准输入从其子进程读取消息。 回到问题。 popen({PAGER:-more}, "w") 将货币进程的标准输出连接到 more 进程的标准输入。 因此,fgets(line, MAXLINE, fpin)从argv[1]读取字符串并将字符串通过管道传输到more,more将其打印到终止。例子的效果类似 cat $argv1 | ${PAGER:-more}

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.