gpt4 book ai didi

c - 缓冲 I/O 的基本实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:19 24 4
gpt4 key购买 nike

我正在为 D 创建一个自定义缓冲 I/O 库(移除 C 依赖)。我查看了 libc 的源代码,并设法找到了 _IO_file_xsputn。但我不确定从那里去哪里。据我所见,它检查输入长度并将数据复制到缓冲区中。但我不确定从那里去哪里。是否有类似伪代码的表达式来说明如何实现缓冲 I/O?这是我对缓冲 puts 类函数的猜测:

if (buf.length - pos /* available space */  < data.length) {
flush
syscall::write the whole input data
} else {
add data to buf (memcpy, pos += data.length)
if (data contains '\n')
flush upto '\n' // Maybe whole buffering instead?
}

最佳答案

请不要使用 libio 作为任何例子。这段代码是在 90 年代中期编写的,目的是与 C++ 运行时库 (libstdc++) 共享它。结果,代码以一种奇怪的风格编写,基本上是 C++ streambuf 类的手动翻译。出于 ABI 兼容性的原因,我们现在坚持使用它,以便人们可以运行他们真正非常古老的 C++ 软件(他们仍然这样做)。

可悲的是,C++ ABI 从那时起以不兼容的方式进行了多次更改,最终确定为 C++ Itanium ABI(它仍然与我们在 glibc 中的内容不兼容)。

关于c - 缓冲 I/O 的基本实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com