离开了很长时间之后,我正在用C做一个小项目。这些碰巧包括一些文件处理。我在各种文档中注意到,有一些函数返回FILE *
句柄,而其他函数则返回(小整数)描述符。两组功能都提供了我所需的相同基本服务,因此我使用它并不重要。
但是我对收集的智慧感到好奇:使用fopen()
和 friend ,还是open()
和 friend 会更好?
编辑既然有人提到了缓冲与非缓冲以及访问设备,我应该补充一点,这个小项目的一部分将在FUSE下编写用户空间文件系统驱动程序。因此,文件级访问可以像在"file"(即镜像)上一样容易地在设备(例如CDROM或SCSI驱动器)上进行。
最佳答案
反对“fopen”是可移植的而“open”不是假的。
fopen是libc的一部分,open是POSIX系统调用。
每个组件都像它们来自的地方一样轻便。
I/O到fopen文件是由libc缓冲的(您必须假定它是出于实际目的,并且出于实用目的),libc不会缓冲文件描述符open()的存在(它们可能是,并且通常是缓冲在文件系统中-但不是您open()的所有内容都是文件系统上的文件。
例如,打开像/dev/sg0或/dev/tty0这样的设备节点的目的是什么?您要对文件*做一个ioctl吗?祝你好运。
也许您想使用O_DIRECT之类的标志打开-使用fopen()毫无意义。
关于c - 有什么普通的理由使用open()而不是fopen()吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/544662/