Linux中文件IO(open、read、write、close函数使用)
介绍
- 什么是文件IO?
是操作系统提供的API接口函数。
POSIX接口 (了解)
注意:文件IO不提供缓冲机制
文件IO的API
open close read read
文件描述符概念:
英文:缩写fd(file descriptor)
是0-1023的数字,表示文件。
0, 1, 2 的含义 标准输入,标准输出,错误 - 文件IO和标准IO的函数类型
文件IO打开使用
- 函数如下:
open
int open(const char *pathname, int flags); 不创建文件
int open(const char *pathname, int flags, mode_t mode); 创建文件,不能创建设备文件
成功时返回文件描述符;出错时返回EOF - flags的用法如下:
文件IO和标准的模式对应关系:
r O_RDONLY
r+ O_RDWR
w O_WRONLY | O_CREAT | O_TRUNC, 0664(普通用户权限)
w+ O_RDWR | O_CREAT | O_TRUNC, 0664
a O_WRONLY | O_CREAT | O_APPEND, 0664
a+ O_RDWR | O_CREAT | O_APPEND, 0664
umask概念:
umask 用来设定文件或目录的初始权限
注:这个0664实际是等于创建的权限-linux默认的初始权限 - 代码如下:
- 运行如下:
注:可以看到多出一个test.txt文件
关闭文件
- 函数如下:
int close(int fd)
关闭后文件描述符不能代表文件
文件IO的读写和定位
容易出错点:
求字符串长度使用sizeof,对二进制数据使用strlen
printf 的字符最后没有’\0’ - 案例代码如下:
- 执行如下:
文件IO-read、write
- read函数如下:
ssize_t read(int fd,void *buf,size_t count)//读文件数据的
注:成功时返回实际读取的字节数;出错时返回EOF
读取到文件末尾返回0
buf是接受数据的缓冲区
count不应超过buf‘大小,count是想读多少, - write函数如下:
write函数用来向文件写入数据
ssize_t write(int fd,void *buf,size_t count);//count时写多少数据的大小,自己定义
注:成功时返回实际写入的字节数;出错时返回EOF
buf是发送数据的缓冲区
count不应超过过buf大小 - 代码如下:
注:write函数那一行,ret返回的是第三个参数的值,strlen(buf)也就是实际值,如果是sizeof(buf)的话返回的就是30个不是实际值了,但二进制数据的话就不能用strlen,因为二进制里面有很多/0,而strlen就是以/0标志为结束标志的。还有就是第二个close(fd)加上是因为,read读数据的话是接着上面的写函数的流指针,如果不加入close的话,指针位置在文件末尾,往后读就为空,加上之后再加入打开文件,指针自动移动到文件首处,然后可以正常显示数据了 - 执行如下:
文件IO的定位
- 函数如下:
off_t lseek(int fd,off_t offset,intt whence)
注:成功时返回当前的文件读写位置;出错时返回EOF
参数offset和参数whence同fseek完全一样 - 代码如下:
注:将close函数和open函数替换成上述代码即可达到一样的效果
原文地址:https://blog.csdn.net/weixin_58036810/article/details/135766236
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!