【问题标题】:questions about file stream and buffer in CC语言中关于文件流和缓冲区的问题
【发布时间】:2015-10-04 02:22:24
【问题描述】:

我正在阅读“Unix 环境中的高级编程”,第 5.5 节,P150,它说:

1.任何缓冲的输出数据在文件关闭之前被刷新。任何可能被缓冲的输入数据都会被丢弃....
2.当一个进程正常终止时,...,所有带有未写入缓冲数据的标准I/O流都被刷新...

在 1 中,是否意味着当我使用 fclose() 关闭流时,缓冲的输入将被丢弃,因此某些数据不会写入文件。如果不是,“文件已关闭”是什么意思?

在2中,“未写入的缓冲数据被刷新”意味着缓冲数据将被写入文件吗?

【问题讨论】:

    标签: c stream buffer


    【解决方案1】:

    在#1 中,“缓冲输入”是指您的程序可以 流中读取的数据...所以它基本上是说,一旦您关闭流,就无法从中读取更多数据.缓冲输入是可能已从与流关联的文件/设备中读取并放置在流的输入缓冲区中的数据,但实际上还没有被您的代码读取(提前检索并基本上等着你看)。丢弃它不会阻止将任何内容写入文件,因为它是 从文件中读取的输入,而不是要写入 的输出。

    在 #2 中,他们说当您的程序结束时(通常),您的程序写入的任何内容实际上并未写入磁盘上的文件(或与该流相关联的任何设备)将被刷新,即。实际写入磁盘而不是坐在缓冲区中。通常,您的流写入暂时保存在缓冲区中,并且仅在刷新缓冲区时才实际写入(这可能发生在缓冲区已满、调用fflush() 时、关闭流时等)

    【讨论】:

    • 我认为在#1 中,“缓冲输入”是将数据写入磁盘上的文件。按照你的说法,输出流是写入文件的数据,输入流是从文件中读取的数据,对吧?或者,“缓冲输入”与输入流不同?
    • @tiantong “缓冲输入”是从磁盘上的文件读取到流的缓冲区中的数据。但不一定会被您的程序消耗,直到您调用读取 fgets()fread() 等输入的函数。“输入”和“输出”与您的程序相关,而不是文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多