在C中一次读取一个字节的文件效率如何?

时间:2018-09-01 19:47:48

标签: c

读完本书大部分“ C编程语言”之后,我认为我对C编程有相当的了解。该书中介绍的一种常见C习惯用法是一次读取一个字节的文件,使用getchar()fgetc()之类的函数。到目前为止,我一直在使用这些功能来完成C程序中的所有IO。

我的问题是,这是一种读取文件的有效方法吗?一次获取单个字节的调用是否需要大量开销,如果一次将多个字节读入缓冲区,例如通过在Unix系统上使用read()系统调用,可以将这些开销最小化吗?还是操作系统和C库在后台处理缓冲区以提高效率?而且,这是否与一次写入单个字节的文件的工作方式相同?

我想知道它通常在C语言中如何工作,但是,如果它是实现或特定于OS的,我想知道它在常见的类Unix系统(如macOS和linux)的GCC中如何工作。

1 个答案:

答案 0 :(得分:12)

使用getchar()是有效的,因为标准I / O库使用缓冲来一次读取多个字节(将它们保存在缓冲区中),并在调用getchar()时一次分配一个字节

使用read()一次读取一个字节通常要慢得多,这通常是因为每次都进行完整的系统调用。它仍然没有灾难性的慢,但是却远不及将512或4096字节读取到缓冲区的速度。

那些是广泛的,笼统的陈述。可以添加许多警告,但是它们是getchar()等的合理合理的概述。