在离开 C 很长一段时间后,我正在用 C 语言做一个小项目。这些恰好包括一些文件处理。我在各种文档中注意到有些函数返回FILE *
句柄和其他返回(小整数)描述符的内容。两组功能都提供了我需要的相同的基本服务,所以我使用并不重要。
但我很好奇收集智慧:使用它更好吗?fopen()
和朋友,或者open()
和朋友?
Edit由于有人提到了缓冲与无缓冲以及访问设备,我应该补充一点,这个小项目的一部分将是在 FUSE 下编写用户空间文件系统驱动程序。因此,文件级访问可以像在“文件”(即图像)上一样轻松地在设备(例如 CDROM 或 SCSI 驱动器)上进行。
如果您坚持使用类 UNIX 系统,并且您可能希望执行以下操作,那么最好使用 open():
- 对文件创建时的 unix 权限位进行更细粒度的控制。
- 使用读/写/mmap 等较低级别的函数,而不是 C 缓冲流 I/O 函数。
- 使用基于文件描述符(fd)的 IO 调度(poll、select 等)当然可以使用 fileno() 从 FILE * 获取 fd,但必须注意不要将基于 FILE * 的流函数与基于 fd 的函数混合使用。
- 打开任何特殊设备(不是常规文件)
最好使用 fopen/fread/fwrite 以获得最大的可移植性,因为这些是标准 C 函数,而我上面提到的函数不是。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)