读取文件直到内容结束(达到 EOF)

Reading a file until content end (EOF is reached)

提问人: 提问时间:3/24/2022 更新时间:3/24/2022 访问量:632

问:

(尽管如此,一次读取 1 个字符是系统昂贵的)为什么文件内容结束后以下函数没有停止?目前,我正在运行函数,用于文件的路径并作为终端。command line inputscmd

代码如下:

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

C 文件 EOF

评论


答:

0赞 Weather Vane 3/24/2022 #1

您应该测试返回值。read

返回值:读取的字节数 如果函数尝试在文件末尾读取
,则返回 0。
如果允许继续执行,则该函数返回 -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