当前位置: 首页 > news >正文

linux文件IO

目录

一、文件描述符

二、打开文件: open

三、读取:read

四、写入:write

五、  关闭: close


        不带缓冲
          不带缓冲指的是每个read和write都调用内核中的相应系统调用
          不带缓冲的I/O函数不是ANSI C的组成部分,但是是POSIX和XPG3的组成部分
          通过文件描述符来访问文件

一、文件描述符

                对于内核而言,所有打开文件都由文件描述符引用。
                文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。
                当读、写一个文件时,用open或creat返回的文件描述符标识该文件,将其作为参数传送给read或write。
                在posiX.1应用程序中,幻数0、1、2应被代换成符号常数STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。
                这些常数都定义在头文件<unistd.h>中。
                
                由shell默认打开,分别为0/1/2
                标准文件             文件描述符                 介绍
                标准输入             0(stdin)                从键盘输入
                标准输出             1(stdout)                从屏幕输出
                标准错误输出        2(stderr)                从屏幕输出(错误信息)
                hello.txt            3                        hello.txt

二、打开文件: open

        man open
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>
       int open(const char *pathname, int flags);
       int open(const char *pathname, int flags, mode_t mode);
        功能:
                    打开文件
        参数:
                    pathname:文件名
                    flags:打开的方式
                            O_RDONLY:只读的方式打开文件
                            O_WRONLY:只写的方式打开文件            这三个参数互斥
                            O_RDWR:读写的方式打开文件
                                    O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三的参数为其设置权限。
                                    
                                    O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。
                                    O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端。
                                    
                                    O_TRUNC:如文件已经存在,那么打开文件时先删除文件中原有数据
                                            (清空模式)
                                    O_APPEND:以添加方式打开文件,所以对文件的写操作都在文件的末尾进行
                                            (追加模式)
                    mode:模式:被打开文件的存取权限,为8进制表示法。
                                如果以0777创建,会设置权限为0775
                            

        返回:    成功返回文件描述符、
                失败返回-1,并返回错误码
                
                
                标准IO和文件IO的权限
                标准IO                            文件IO
                fopen                            open
                
                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

三、读取:read

        #include <unistd.h>
        ssize_t read(int fd, void *buf, size_t count);
        功能:
                    根据文件描述符,读取相应的文件中的数据
        参数:
                fd:文件描述符
                buf:读取出来的数据存放的位置
                count:读取数据的字节大小
        返回值:
                成功返回读取的字节数,读到末尾成功返回0
                失败返回-1,并设置错误码

四、写入:write

         #include <unistd.h>
        ssize_t write(int fd, const void *buf, size_t count);
        功能:
                    根据文件描述符,写入数据到相应的文件中
        参数:
                fd:文件描述符
                buf:写入的数据存放的位置
                count:写入数据的字节大小
        返回值:
                成功返回写入的字节数
                失败返回-1,并设置错误码

 五、  关闭: close

        #include <unistd.h>
       int close(int fd);
       功能:
                关闭文件描述符对应的文件
       参数:
                fd:文件描述符
       返回值:
                成功返回0
                失败返回-1,并设置错误码

相关文章:

  • 自已定义一个Java异常——子定义异常,和异常遇到的面试题。
  • 计算机视觉+人工智能面试笔试总结——目标检测/图像处理基础题
  • 【html】面试问题总结
  • Python:for循环语句
  • 第9章Linux实操篇-组管理和权限管理
  • java计算机毕业设计基于安卓Android/微信小程序的产后康复APP
  • 计算机毕业设计ssm图书馆管理系统z3z90系统+程序+源码+lw+远程部署
  • java Python+Django的个人博客系统
  • 计算机毕业设计ssm图书馆自习室占座选座zg09h系统+程序+源码+lw+远程部署
  • 第10章Linux实操篇-定时任务调度
  • 06-linux下的软件包管理 RPM YUM
  • java Python+Django的工厂设备管理系统 Pycharm
  • java 基于springboot+vue的居民社区健康管理平台
  • 计算机组成原理学习笔记:计算机的发展历程
  • java毕业设计小区停车场管理系统mybatis+源码+调试部署+系统+数据库+lw
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Git初体验
  • JS实现简单的MVC模式开发小游戏
  • SOFAMosn配置模型
  • WePY 在小程序性能调优上做出的探究
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 大整数乘法-表格法
  • 分布式事物理论与实践
  • 机器学习 vs. 深度学习
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 记一次和乔布斯合作最难忘的经历
  • 前端_面试
  • 悄悄地说一个bug
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 在weex里面使用chart图表
  • ​Java并发新构件之Exchanger
  • ​虚拟化系列介绍(十)
  • (1)Nginx简介和安装教程
  • (ibm)Java 语言的 XPath API
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (离散数学)逻辑连接词
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Google的Objective-C编码规范
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 受管制代码
  • .NET上SQLite的连接
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Transient注解
  • @Validated和@Valid校验参数区别
  • @WebService和@WebMethod注解的用法