【问题标题】:Are the buffer of input and output different in C?C中输入和输出的缓冲区是否不同?
【发布时间】:2021-12-19 23:33:33
【问题描述】:

C 输入和输出的缓冲区是否不同?我正在尝试在汇编中实现缓冲仿真,并尝试像 C 那样做。到目前为止,我已经在我的 fgets 函数中实现了缓冲系统,但是,我不确定在 fputs 函数的情况下我应该如何实现它。如果“缓冲区”相同,那么实现一个包含上次使用的文件描述符的全局变量确实有意义,这样在“fputs、fgets、fputs”操作的情况下,我可以使用最后一个文件描述符来在 fgets 的情况下,在读取之前清除缓冲区。但是这种方法似乎也很昂贵,因为我每次都必须刷新缓冲区,而不管我之前调用了 fputs 函数的事实。还是应该使用两个缓冲区进行输入和输出?

【问题讨论】:

    标签: c assembly buffer


    【解决方案1】:

    或者我应该使用两个缓冲区来输入和输出?

    建议每个文件句柄使用一个缓冲区;这应该涵盖常见的用例——而不是基于 i/o 方向的缓冲。

    【讨论】:

    • 那不是很贵吗?每个文件一个 1024 字节?还是正常?
    • @MostofaHimal:这就是 C stdio 所做的。大多数程序一次只有几个打开的文件,并且几个 4k 或 8kiB IO 缓冲区在现代 PC 上并不是很多总 RAM,甚至在多个进程中加起来也是如此。双向流甚至可能需要每个方向一个缓冲区,尽管我不确定 C stdio 通常对fopen(file, "rw") 做什么。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2012-11-24
    • 2012-06-13
    • 2013-12-19
    • 2016-01-21
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多