linux-----------文件IO

文章详细介绍了文件输入/输出(IO)的概念,包括它在操作系统中的层次结构,以及在Linux环境下文件IO涉及的关键函数,如open用于打开文件,read用于读取文件,write用于写入文件。还提到了文件描述符、错误码(errno)和文件掩码(umask)等重要概念。最后,文章提到了man手册和实现cp命令的作业,强调了跨平台文件操作的差异。
摘要由CSDN通过智能技术生成

 

 

 

 open函数

 read函数

 

一 文件IO
1.1 什么是文件IO
    所谓文件IO指的就是操作系统提供支持的API接口,以对文件的输入和输出
1.2 操作系统的分层
    应用层

        应用APP,bash脚本等
    -----------------------------------
    内核层
        接收应用层发来的通知,去操作相应的硬件 (操作系统)
        文件IO的接口都来自于内核层
    -----------------------------------
    硬件层
        硬盘,鼠标,键盘,lcd,摄像头等
1.3 学习IO的前提
    1> linux下一切皆文件
    2> 文件IO是由操作系统提供的API接口,不同操作系统之间不通用
    3> 由于文件IO直接由内核提供,所以效率比较高,但是频繁的调用
       会极大的浪费CPU资源
    4> linux  :open write read
       windows:_open _write _read
       ios    : Open Write Read
    5> 文件描述符:是一个文件的代表,系统内部为结构体指针数组的下标
    6> 文件描述符中:前三个已经被系统占用
            0:标准输入 (从终端文件写入内存)
            1:标准输出 (从内存输出到终端)
            2:标准错误输出(从内存直接输出到终端)
    7> errno:错误码(系统返回的错误码,其对应着一些错误原因)
             错误原因可以使用perror函数进行打印
    8> 文件掩码:umask
1.4 文件IO的五大函数(linux)
    1> 打开文件         (open)
    2> 写入文件         (write)
    3> 读取文件         (read)
    4> 操作文件读写指针 (lseek)
    5> 关闭文件         (close)
1.5 man手册
    下表显示了手册的 章节 号及其包含的手册页类型。
       1 可执行程序或 shell 命令
       2 系统调用(内核提供的函数)
       3 库调用(程序库中的函数)
       4 特殊文件(通常位于 /dev)
       5 文件格式和规范,如 /etc/passwd
       6 游戏
       7 杂项(包括宏包和规范,如 man(7),groff(7))
       8 系统管理命令(通常只针对 root 用户)
       9 内核例程 [非标准]
1.6 文件IO的操作
【1】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_CREAT,则必须加上第三个参数 mode)
         O_APPEND: 以追加写的方式
         O_TRUNC : 以清空的方式写入
         O_NONBLOCK or O_NDELAY:以非阻塞的方式打开一个文件
    mode    :创建文件的权限(三位八进制数组成)
返回值:
    成功:返回文件描述符
    失败:返回-1
【2】read
原型:#include <unistd.h>
头文件:ssize_t read(int fd, void *buf, size_t count);
功能:从文件中获取一段内容写入到内存buf中
参数:
    fd:目标文件描述符(从哪个文件中读)
    buf:从文件中读取后写入内存的位置
    count:写入文件的字节个数(写入内存的最大字节个数)
返回值:
        成功:返回   读取到的字节个数
              返回0:读到文件的末尾
        失败:返回 -1
【3】write
头文件:#include <unistd.h>    
原型:ssize_t write(int fd, const void *buf, size_t count);
功能:向文件中写入一段字符串
参数:
    fd:目标文件描述符(向哪个文件写入内容)
    buf:写入字符串的首地址
    count:写入文件的字节的个数
    注意:如果buf的长度小于count的值,则会产生空洞文件
          如果buf的长度大于count的值,则写入count大小的字节
返回值:
    成功:返回   实际写入文件的字节的个数
          返回0:向文件中写入0个字节
    失败:返回-1
    
作业:实现cp命令(cp 源文件路径 目标文件路径)
要求:可以支持拷贝图片(二进制文件)
提示:
    1.源文件路径 目标文件路径 使用命令行参数实现
    2.open函数打开两个文件(源文件,目标文件)
    3.循环从源文件中读取内容,再循环写入新的文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值