除了语法上的原因之外,还有其他你想要使用的原因吗
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语言?
除了语法上的原因之外,还有其他你想要使用的原因吗
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等),您将会非常满意。同样重要的是,其他程序员也会对你的代码感到满意。
对于我的应用程序,我从fopen()更改为open(),因为每次我运行fopen fgetc时,fopen都会导致双重读取。重复阅读破坏了我想要完成的事情。Open()似乎只做您要求它做的事情。
使用开、读、写意味着你必须担心信号交互。
如果调用被信号处理程序中断,函数将返回-1 并将errno设置为EINTR。
关闭文件的正确方法是
while (retval = close(fd), retval == -1 && ernno == EINTR) ;
open()是一个系统调用,特定于基于unix的系统,它返回一个文件描述符。可以使用另一个系统调用write()写入文件描述符。 fopen()是一个ANSI C函数调用,返回一个文件指针,它可以移植到其他操作系统。我们可以使用fprintf写入文件指针。
在Unix中: 你可以使用以下方法从文件描述符中获取文件指针:
fP = fdopen(fD, "a");
你可以使用以下方法从文件指针获取文件描述符:
fD = fileno (fP);