在离开 C 语言很长时间后,我正在用 C 语言做一个小项目。这些恰好包括一些文件处理。我在各种文档中注意到,有些函数返回 FILE *
句柄,有些函数返回(小整数)描述符。两组功能都提供了我需要的相同基本服务,所以我使用它真的无关紧要。
但我很好奇收集智慧:使用fopen()
和 friend 更好,还是open()
和 friend 更好?
编辑 由于有人提到缓冲与非缓冲和访问设备,我应该补充一点,这个小项目的一部分将是在 FUSE 下编写用户空间文件系统驱动程序。因此,文件级访问在设备(例如 CDROM 或 SCSI 驱动器)上与在"file"(即图像)上一样容易。
最佳答案
如果您坚持使用类 unix 系统并且您可能喜欢:
- 对文件创建的 unix 权限位进行更细粒度的控制。
- 使用较低级别的函数,例如读/写/mmap,而不是 C 缓冲流 I/O 函数。
- 使用基于文件描述符 (fd) 的 IO 调度(轮询、选择等)您当然可以使用 fileno() 从 FILE * 获取 fd,但必须注意不要将基于 FILE * 的流函数与基于 fd 的函数。
- 打开任何特殊设备(不是常规文件)
最好使用 fopen/fread/fwrite 以获得最大的可移植性,因为这些是标准的 C 函数,我上面提到的函数不是。
关于c - 是否有任何普通理由使用 open() 而不是 fopen()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/544662/