在 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
的函数(例如 fread
、fgetc
等)。
我对 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
的函数(例如 fread
、fgetc
等)。