在c中使用dup和dup2重定向标准输出时出现问题

问题描述

我在使用 dup 和 dup2 时遇到问题。

int copy (char * file1,char * file2) {
        int dr = open(file1,O_RDONLY);
        if (dr == -1) {
                return -1;
        }

        int dw = open(file2,O_WRONLY|O_Trunc|O_CREAT,0644); 
        if (dw == -1) {
                return -1;
        }

        int save0 = dup(0); 
        int save1 = dup(1); 

        dup2(dr,0); 
        close(dr); 

        dup2(dw,1); 
        close(dw); 

        char c;
        while ((c = getchar()) != EOF) {  
                putchar(c); 
        }

        dup2(save0,0); 
        dup2(save1,1); 

        printf("Hi");
        return 0;
}

我不明白为什么我的文件 file1 中的数据显示在屏幕上,因为 dr 是标准输入而 dw 是标准输出...

感谢您的帮助。

解决方法

您(可能)只需要刷新缓冲区:

0.17.0-nullsafety.2

由于您尚未包含完整代码,因此很难确定。另外,请确保在调用此函数之前,您没有在标准输入上执行任何类似 while ((c = getchar()) != EOF) { putchar(c); } fflush(stdout); /* Actually write to the file */ dup2(save0,0); dup2(save1,1); 的函数(例如 readfread 等)。