Linux中文件IO(open、read、write、close函数使用)

发布时间:2024年01月23日

介绍

  • 什么是文件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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。