除了语法上的原因之外,还有其他你想要使用的原因吗

FILE *fdopen(int fd, const char *mode);

or

FILE *fopen(const char *path, const char *mode);

而不是

int open(const char *pathname, int flags, mode_t mode);

在Linux环境下使用C语言?


当前回答

除非你属于那0.1%的应用程序,使用open可以带来实际的性能优势,否则真的没有理由不使用fopen。就fdopen而言,如果不使用文件描述符,就不需要这个调用。

坚持使用fopen及其方法家族(fwrite、fread、fprintf等),您将会非常满意。同样重要的是,其他程序员也会对你的代码感到满意。

其他回答

fopen和C语言中的open

1) fopen是一个库函数,open是一个系统调用。

2) fopen提供了缓冲IO,它比没有缓冲的open更快。

3) fopen是可移植的,而open是不可移植的(open是特定于环境的)。

4) fopen返回一个指向FILE结构的指针(FILE *);Open返回一个标识文件的整数。

5) FILE *让你能够使用fscanf和其他stdio函数。

除非你属于那0.1%的应用程序,使用open可以带来实际的性能优势,否则真的没有理由不使用fopen。就fdopen而言,如果不使用文件描述符,就不需要这个调用。

坚持使用fopen及其方法家族(fwrite、fread、fprintf等),您将会非常满意。同样重要的是,其他程序员也会对你的代码感到满意。

Open()是一个低级操作系统调用。fdopen()将操作系统级别的文件描述符转换为C语言的更高级别的file -抽象。fopen()在后台调用open(),并直接给你一个FILE-pointer。

使用file -object而不是原始文件描述符有几个优点,其中包括更易于使用,以及其他技术优点,如内置缓冲。特别是缓冲通常会带来相当大的性能优势。

对于我的应用程序,我从fopen()更改为open(),因为每次我运行fopen fgetc时,fopen都会导致双重读取。重复阅读破坏了我想要完成的事情。Open()似乎只做您要求它做的事情。

Open()将在每个fopen()家族函数的末尾调用。Open()是一个系统调用,fopen()是库提供的包装函数,方便用户使用