问题描述
我在使用 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);
的函数(例如 read
、fread
等)。