Linux fopen/fread/fwrite和open/read/write
1、fopen
FILE * fopen (const char * filename, const char * mode);
1)打开filename指定的文件。成功返回文件指针。
2、fread
size_t fread (void * ptr, size_t size, size_t count, FILE * stream);
1)从文件指针stream,读count个元素,每个元素size个字节,到ptr中。成功返回读到的字节数。
3、fwrite
size_t fwrite (const void * ptr, size_t size, size_t count, FILE * stream);
1)从ptr,写入count个size字节的元素到文件指针stream。成功返回写入的字节数。
4、open
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
1)打开pathname指定的文件。成功返回文件描述符。
5、read
ssize_t read(int fd, void *buf, size_t count);
1)从文件描述符fd,读不超过count个字节到buf中。成功返回读到的字节数(可能为0,即已经读到文件末尾),失败则返回-1。
6、write
ssize_t write(int fd, const void *buf, size_t count);
1)从buf,写不超过count个字节到文件描述符fd中。成功返回写入的字节数,失败则返回-1。
7、fopen/fread/fwrite是open/read/write的封装。前者是库函数,后者是系统调用;前者带有用户态缓冲,可以减少磁盘IO次数,后者不带用户态缓冲,适用于内存有限制的场景;前者只能操作流文件,后者可以操作所有文件,如设备文件;前者可移植性强,后者更接近硬件,有更高的操作权限。
参考链接:
http://www.cplusplus.com/reference/cstdio/fopen/
http://www.cplusplus.com/reference/cstdio/fread/
http://www.cplusplus.com/reference/cstdio/fwrite/
http://man7.org/linux/man-pages/man2/open.2.html
http://man7.org/linux/man-pages/man2/read.2.html
http://man7.org/linux/man-pages/man2/write.2.html