C 你什么时候用fopen而不是open?

C 你什么时候用fopen而不是open?,c,file-io,fopen,C,File Io,Fopen,通过测试,我没有发现任何差异 决定这一点的关键是什么?fopen是任何C环境都应该提供的可移植接口。此外,它的结果是一个缓冲流(FILE*),可以与方便的stdio函数一起使用 open是一个特定于Unix/POSIX的接口。其结果是一个裸(无缓冲)文件描述符,必须与低级系统调用一起使用。它确实允许对I/O进行更细粒度的控制(请参阅中的标志列表),因此有时您可能希望打开一个文件,然后可能需要它来获取stdio和缓冲。如链接中所示,open是POSIX标准接口,不仅仅是unix。@new_perl

通过测试,我没有发现任何差异


决定这一点的关键是什么?

fopen是任何C环境都应该提供的可移植接口。此外,它的结果是一个缓冲流(
FILE*
),可以与方便的
stdio
函数一起使用


open
是一个特定于Unix/POSIX的接口。其结果是一个裸(无缓冲)文件描述符,必须与低级系统调用一起使用。它确实允许对I/O进行更细粒度的控制(请参阅中的标志列表),因此有时您可能希望
打开
一个文件,然后可能需要它来获取
stdio
和缓冲。

如链接中所示,open是POSIX标准接口,不仅仅是unix。@new_perl:除非你有很好的理由不这样做,否则你可以使用
fopen
open
更难使用,而且不是很可移植。它不难使用,只是不可移植。@zvrba:除了二进制I/O,文件描述符比streams更难使用;您需要包含更多的头以获得正确的操作;而
open
接受的参数数量可变,如果传递的参数数量或标志错误,则很难进行调试。open也存在于Windows C RTL中,但与POSIX RTL略有不同。例如,您不能使用它打开目录。