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

Problem when redirecting standard output with dup and dup2 in c

我对 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是标准输出...

感谢您的帮助。

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

while ((c = getchar()) != EOF) {  
        putchar(c); 
}
fflush(stdout);   /* Actually write to the file */
dup2(save0, 0); 
dup2(save1, 1);

由于您没有包含完整代码,所以很难确定。另外,请确保在调用此函数之前您没有在标准输入上执行任何类似 read 的函数(例如 freadfgetc 等)。