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,并设置错误码

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值