asker160 发表于 2017-03-04 20:14

[结贴]dup2似乎不能和pipe联合使用,做i/o重定向?

本帖最后由 asker160 于 2017-03-08 18:42 编辑

我尝试把一个pipe和stdin/stdout连接起来,我希望stdin输入的东西被写入到pipe的write端,然后pipe的read端自动把内容dump到控制台。程序如下:
#include<stdio.h>
#include<unistd.h>
int main(){
    int pipefd;
    pipe(pipefd);
    int& readfd=pipefd;
    int& writefd=pipefd;
    dup2(STDIN_FILENO,writefd);
    dup2(STDOUT_FILENO,readfd);

    char buf;
    scanf("%s",buf);
    return 0;
}

编译运行这个程序,除了scanf能接受输入以外,没有什么其他的控制台输入了。
我的问题:

1. 我的两个dup2是否真的把控制台I/O重定向到了pipe
2. 如果是,那么我scanf输入的内容,有没有到pipe里面,pipe的读端有没有自动关联到stdout并打印出来?

我的程序该怎么改呢?
谢谢。

nswcfd 发表于 2017-03-07 16:37

没有write(1,...),数据怎么可能被dump出来,scanf里(一般意义上)只有read(0,...)

folklore 发表于 2017-03-07 17:12

int dup2(int oldfd, int newfd);

你写反了。

asker160 发表于 2017-03-08 18:41

你说的对。
页: [1]
查看完整版本: [结贴]dup2似乎不能和pipe联合使用,做i/o重定向?