• 文件IO(Linux)


    open():打开文件

    • 函数原型

      // 1、
      int open(const char *pathname, int flags);
      - 功能:打开一个已有文件
      - 参数:pathname为文件路径
             flags为对文件的操作权限 (O_RDONLY, O_WRONLY, O_RDWR)
      - 返回值:成功则返回一个新的文件描述符
          	 失败则返回-1
      
      // 2、
      int open(const char *pathname, int flags, mode_t mode);
      - 功能:创建一个新文件
      - 参数:pathname为文件路径
             flags为对文件的操作权限 (O_RDONLY, O_WRONLY, O_RDWR, O_CREATE)
        	   mode为八进制数,表示创建出新的文件的操作权限,比如:0777
          	最终权限:mode & ~umask,umask的值不同用户不一样,其目的是抹去一些权限
      - 返回值:
          	 成功则返回一个新的文件描述符
          	 失败则返回-1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

    read():读数据

    • 函数原型
      ssize_t read(int fd, void *buf, size_t count);
      - 功能:读数据,保存到buf内存中
      - 参数:fd 文件描述符
             buf 读到的数据,存放的地方(传出参数)
             count 数组的大小
      - 返回值:
          	>0 返回读取到的字节数量
          	=0 表示到了文件末尾,文件读取完
          	-1 出现了错误
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    write():写数据

    • 函数原型

      ssize_t write(int fd, const void *buf, size_t count);
      - 功能:将数据,写入到buf内存中
      - 参数:fd 文件描述符
             buf 要往磁盘写入的数据
             count 要写的数据的实际的大小
      - 返回值:
          	>0 返回读取到的字节数量
          	-1 出现了错误
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    lseek():对文件指针偏移

    • 函数原型
      off_t lseek(int fd, off_t offset, int whence);
      - 功能:对文件指针进行偏移
      - 参数:fd 文件描述符
             offset 偏移量
             whence 标志
          			SEEK_SET 设置文件指针的偏移量,从文件头开始
          			SEEK_CUR 设置文件指针的偏移量,从当前位置开始
          			SEEK_END 设置文件指针的偏移量,从文件尾开始,可以获取文件长度
      - 返回值:返回文件指针的位置
      - 作用:
          1、移动文件指针到文件头
          2、获取当前文件指针的位置
          3、获取文件长度
          4、拓展文件长度
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

    dup():复制文件描述符

    • 函数原型
      int dup(int oldfd);
      - 功能:复制文件描述符
      - 参数:oldfd 旧的文件描述符
      - 返回值:
          	成功:返回一个新的文件描述符(从空闲的文件描述符表中找一个最小的),和就的文件描述符指向同一个文件
          	失败:-1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    dup2():重定向文件描述符

    • 函数原型
      int dup2(int oldfd, int newfd);
      - 功能:重定向文件描述符
      - 参数:oldfd 旧的文件描述符
             newfd 新的文件描述符
      - 返回值:
          	成功:返回一个新的文件描述符(和newfd一样),都是指向 oldfd 指向的文件
          	失败:-1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    fcntl():操作文件描述符

    • 函数原型

      int fcntl(int fd, int cmd, ...可变参数);
      - 参数:fd 文件描述符
             cmd 表示对文件描述符进行如何操作
             按需添加可变参数
      - cmd 可选:
          		F_DUPFD : 复制文件描述符,复制fd,得到一个新的文件描述符(不需要可变参数)
                  F_GETFL : 获取指定的文件描述符的文件状态 flag
                  F_SETFL : 设置文件描述符文件状态 flag (需要可变参数)
                      	O_RDONLY、O_WRONLY、O_RDWR、O_APPEND、O_NONBLOCK(非阻塞)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
  • 相关阅读:
    电子支付市场现状研究:预计2022年业务量将增长至3141亿元
    上传自己的私有的(公共的)CocoaPods支持库
    Spring Boot中如何读取配置呢?
    iOS开发进阶(八):ipa应用唤起并跳转至指定页面
    【性能优化】MySQL常用慢查询分析工具
    此次519暴跌的几点感触 2021-05-21
    python 线程安全和锁
    彩色文字界面尼姆游戏(Python类 + mypycolor 工具协作打造)
    Arduino操作MPU6050模块
    Java教程:只会懒汉式和饿汉式,那你还不算真的懂单例模式
  • 原文地址:https://blog.csdn.net/Sir666888/article/details/126243784