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

 

posted @ 2020-04-10 19:26  happyyoung  阅读(442)  评论(0编辑  收藏  举报