C - 将 IO 定向到管道,然后将其恢复回控制台

标签 c linux terminal pipe

上下文:我正在构建一个 UNIX shell,目前正在实现管道。

目标:由管道分隔的调用将输出从一个传递到另一个,只打印最终输出。

症状:最后一个进程继续输出到管道中,因此我什么也看不到,也不知道它是否正确执行,是否接收到前一个进程的输出作为输入等。

诊断我是否可以随意在管道和控制台之间切换输出:我只是简单地创建了管道,将其引导到其中,然后返回到控制台,然后再继续之前的代码execvp() 调用(即它无论如何都应该被打印)以查看它是否回到终端上。

我测试的代码:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "unistd.h"
#include "errno.h"
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <signal.h>

//all the #includes I've got in the original project

int main(int argc, char* argv[])
{
    int fp[2];
    pipe(fp);

    int saved_fd_0, saved_fd_1;

    saved_fd_0 = dup2(fp[0], 0);
    saved_fd_1 = dup2(fp[1], 1);
    dup2(saved_fd_1, 1);
    dup2(saved_fd_0, 0);
    close(fp[0]);
    close(fp[1]);

    printf("output is at terminal");
}

我根据this answer选择了这个序列但它无法打印超过这段代码的任何内容。不幸的是,我发现的类似问题通常归结为 fflush() 调用,或者不关心将输出恢复到终端(即我没有做任何研究就问)。

非常感谢。

我正在使用 ls | 进行测试wc 作为输入。

最佳答案

你确实搜索好了,上面的代码几乎没有做任何有用的事情。 听起来像科尔。项目,所以这里有一些提示

  1. 多个管道可以出现在一个 cmdline 上

  2. 管道是让它工作所需的一切(图表可以提供帮助)

关于C - 将 IO 定向到管道,然后将其恢复回控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33988199/

相关文章:

c - __forceinline__ 对 CUDA C __device__ 函数的影响

c - 显示学生成绩的链接列表程序

c - 将 sigaction 声明为值类型的指针类型

php - "Incorrect SQLSTATE given to is_truncated_warning."在 Debian Linux 中使用 PHP 和 SQLSRV

git - 找不到 git 更新后 Hook 中的 Bash 命令

c - 使用 cURL 和 C API 通过 http 提取动态数据的值

Linux - 不同组对文件的权限

linux - 如何判断进程是否正在运行?

linux - 更多命令 - linux

php - 从终端运行,更改字符编码!我认为。 (乌本图)