例如,在C中,我们有fopen
,而在Unix中,我们有open
。它们之间存在一些微妙的差异,但它们正在做同样的事情。
还有许多其他功能都存在于C和Unix中,它们之间的关系是什么?我应该选择哪一个?
答案 0 :(得分:3)
fopen(3)在成功时返回FILE*
,但open(2)成功返回文件描述符,因此他们没有做同样的事情(因为没有提供相同的类型)。 / p>
但是,在Linux上,fopen
在内部使用open
system call(以及其他一些......)。
<stdio.h>
文件句柄正在处理缓冲。使用open
和read
之类的系统调用,您可以更好地进行自己的缓冲。
另见this&amp; that并阅读Advanced Linux Programming&amp; syscalls(2)。请注意,在Linux上,从用户域应用程序的角度来看,系统调用本质上是一个原子初级操作(例如SYSCALL
或SYSENTER
机器指令)。
使用strace(1)找出执行的系统调用(通过给定的进程或命令)。
在Linux上,libc正在实现系统调用之上的标准函数(如fprintf
....)。
许多系统调用没有任何libc对应物(除了它们的包装器),例如poll(2)
答案 1 :(得分:3)
open 是来自Unix系统的系统调用。 fopen 是打开文件的标准c函数。
使用fopen而不是开放有一些优点。
它的多平台,作为它的C标准,您可以使用C编译器将程序移植到任何平台。
它支持使用C标准函数(即:fprintf,fscanf)
如果处理文本文件,这些函数可以处理不同的新行字符(Unix / Windows)