离开了很长时间之后,我正在用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/

10-11 22:39
查看更多