使用系统调用read无法读取文本文件的最后一行

时间:2013-12-14 16:09:46

标签: c system call

我正在使用C:

中的简单代码读取此文本文件(逐个字符)
  

这是文件

printf 函数不会打印任何内容!

它只是一行文本(但它发生在文本文件的每一行)。

这是代码:

int main(int argc, char *argv[])
{
    int fd, bytes_read;
    char buf;

    if((fd = open(argv[1], O_RDONLY)) == -1)
    {
        perror("open");
        exit(EXIT_FAILURE);
    }

    do
    {
        if((bytes_read = read(fd, &buf, sizeof(buf))) == -1)
        {
           perror("read");
           exit(EXIT_FAILURE);
        }

        printf("%c", buf);
    }
    while(bytes_read != 0);

    close(fd);
}

谢谢!

3 个答案:

答案 0 :(得分:0)

我不是肯定确定这是为什么,但可能是因为“非空的源文件应以换行符结尾,不得紧接着一个反斜杠字符。“

有关详细信息,请参阅http://robots.thoughtbot.com/no-newline-at-end-of-file/,这是一本有趣的读物。

答案 1 :(得分:0)

我发现代码中没有任何错误检查。你确定你真的成功打开了文件吗?您必须检查每个系统调用的返回值,并根据您的错误采取谨慎行动。

答案 2 :(得分:0)

尝试在循环后的某处添加fflush(stdout);。 输出流可能是行缓冲的。