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函数替换成上述代码即可达到一样的效果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405096.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!