我想将一个文件的内容复制到另一个文件。
[起初我以为fgetc()
会比fread()
更好,因为该程序无需为了复制每个字符而重复通过缓冲区。
但是我很快意识到,重复使用fgetc()
等效于执行多个函数(堆栈指针),这样,如果文件很大,它将使过程更加耗时。
哪个更有效?
fgetc
的问题是现代C实现支持threads。 FILE
可以由多个线程共享,这就是为什么访问缓冲区需要显式锁定的原因。虽然您可以使用setbuf
来扩大缓冲区,但并不能消除锁定的必要。因此,fread
调用几乎总是比多个fgetc
调用性能更高。
setbuf
设置只能对性能有很大影响。要一次从缓冲流中读取单个字符,可以在文件被线程锁定时使用POSIX标准flockfile
/ funlockfile
和getc_unlocked
。