为什么这个用于复制文件的 C 程序不能正常工作?
why this c program for copying a file is not working correctly?
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int fd1 = open(argv[1], O_RDONLY);
int fd2 = open(argv[2], O_WRONLY | O_TRUNC | O_CREAT, 0700);
if (fd1 == -1 || fd2 == -1) {
perror("cannot open file");
exit(-1);
}
char buffer[100];
int n;
while (n = read(fd1, buffer, 100) > 0) { // not working
write(fd2, buffer, n);
}
close(fd1);
close(fd2);
return 0;
}
我正在尝试编写一个 C 程序,将一个文件的内容复制到另一个文件。
我认为 while 循环中的读取有问题,但我不确定。
while( n = read( fd1, buffer, 100) > 0)
这是不正确的,因为它将 read( fd1, buffer, 100) > 0
的结果分配给了 n
。发生这种情况是因为 >
的优先级高于 =
.
要更正此问题,请使用括号:
while((n = read( fd1, buffer, 100)) > 0)
切勿在条件内使用赋值。这是一种非常简单的方法来解决与运算符优先级、副作用、错误输入的 == 等相关的各种错误。
在您的情况下,错误是 >
的优先级高于 =
。
在这种情况下,代码可以重写为:
int n;
while(1)
{
n = read(fd1, buffer, 100);
if(n==0)
break;
if(write(fd2, buffer, n) != n)
{
/* handle errors */
}
}
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int fd1 = open(argv[1], O_RDONLY);
int fd2 = open(argv[2], O_WRONLY | O_TRUNC | O_CREAT, 0700);
if (fd1 == -1 || fd2 == -1) {
perror("cannot open file");
exit(-1);
}
char buffer[100];
int n;
while (n = read(fd1, buffer, 100) > 0) { // not working
write(fd2, buffer, n);
}
close(fd1);
close(fd2);
return 0;
}
我正在尝试编写一个 C 程序,将一个文件的内容复制到另一个文件。 我认为 while 循环中的读取有问题,但我不确定。
while( n = read( fd1, buffer, 100) > 0)
这是不正确的,因为它将 read( fd1, buffer, 100) > 0
的结果分配给了 n
。发生这种情况是因为 >
的优先级高于 =
.
要更正此问题,请使用括号:
while((n = read( fd1, buffer, 100)) > 0)
切勿在条件内使用赋值。这是一种非常简单的方法来解决与运算符优先级、副作用、错误输入的 == 等相关的各种错误。
在您的情况下,错误是 >
的优先级高于 =
。
在这种情况下,代码可以重写为:
int n;
while(1)
{
n = read(fd1, buffer, 100);
if(n==0)
break;
if(write(fd2, buffer, n) != n)
{
/* handle errors */
}
}