读取文件直到内容结束(到达 EOF)
Reading a file until content end (EOF is reached)
(尽管如此,一次读取 1 个字符是系统开销很大的)为什么文件内容结束后以下函数不会停止?目前我是 运行 使用 command line inputs
作为文件路径和 cmd
作为终端的函数。
代码如下:
int flen(int file){
int i;
char c = 0;
for(i = 0; c != EOF; i++){
read(file, &c, 1);
}
return i;
}
int main(int argc, char *argv[]){
long long len;
int fd;
if(argc != 2){
fprintf(stderr, "Usage: %s <valid_path>\n",argv[0]);
exit(EXIT_FAILURE);
}
if((fd = open(argv[1], O_RDONLY, 0)) == -1){
fprintf(stderr, "Fatal error wihile opening the file.\n");
exit(EXIT_FAILURE);
}
len = flen(fd);
printf("%d\n", len);
exit(0);
}
我认为问题可能与 for 循环条件中的 EOF
有关。但如果这是真的,我怎么知道文件真正结束的时间?
您应该改为测试 read
中的 return 值。
Return Value: the number of bytes read
If the function tries to read at end of file, it returns 0.
If execution is allowed to continue, the function returns -1.
long long flen(int file) {
long long i = 0;
char c;
while(read(file, &c, 1) == 1) {
i++;
}
return i;
}
旁白:您的类型与 int flen()
和 long long len
不匹配。
(尽管如此,一次读取 1 个字符是系统开销很大的)为什么文件内容结束后以下函数不会停止?目前我是 运行 使用 command line inputs
作为文件路径和 cmd
作为终端的函数。
代码如下:
int flen(int file){
int i;
char c = 0;
for(i = 0; c != EOF; i++){
read(file, &c, 1);
}
return i;
}
int main(int argc, char *argv[]){
long long len;
int fd;
if(argc != 2){
fprintf(stderr, "Usage: %s <valid_path>\n",argv[0]);
exit(EXIT_FAILURE);
}
if((fd = open(argv[1], O_RDONLY, 0)) == -1){
fprintf(stderr, "Fatal error wihile opening the file.\n");
exit(EXIT_FAILURE);
}
len = flen(fd);
printf("%d\n", len);
exit(0);
}
我认为问题可能与 for 循环条件中的 EOF
有关。但如果这是真的,我怎么知道文件真正结束的时间?
您应该改为测试 read
中的 return 值。
Return Value: the number of bytes read
If the function tries to read at end of file, it returns 0.
If execution is allowed to continue, the function returns -1.
long long flen(int file) {
long long i = 0;
char c;
while(read(file, &c, 1) == 1) {
i++;
}
return i;
}
旁白:您的类型与 int flen()
和 long long len
不匹配。