• 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。
                    这些常数都定义在头文件中。
                    
                    由shell默认打开,分别为0/1/2
                    标准文件             文件描述符                 介绍
                    标准输入             0(stdin)                从键盘输入
                    标准输出             1(stdout)                从屏幕输出
                    标准错误输出        2(stderr)                从屏幕输出(错误信息)
                    hello.txt            3                        hello.txt

    二、打开文件: open

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

    四、写入:write

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

     五、  关闭: close

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

  • 相关阅读:
    【Spring5】AOP面向切面?程序不可多得的Buff
    Sqlmap(SQL注入自动化工具)
    东方博宜11月月赛(A,B,C三组的题解)
    python 随机数生成
    【python】带你采集基金股票数据并作可视化操作
    dolphinscheduler添加hana支持
    速卖通新品如何推广,速卖通的推广渠道有哪些?——站斧浏览器
    Spring Boot整合Mybatis
    【LeetCode】 贴纸拼词(动态规划)
    STM32中除零运算,为何程序不崩溃?
  • 原文地址:https://blog.csdn.net/qq_54075859/article/details/126611513