系统调用之文件IO

本文介绍了标准IO库函数与Linux内核中文件IO的区别,包括缓存、文件流指针等,并详细讲解了文件的打开、关闭、读写操作,以及文件权限管理。最后给出了文件内容拷贝的作业示例和分析。
摘要由CSDN通过智能技术生成

学习完使用标准io库函数,进一步深入linux的内核实现系统的调用,本节主要学习文件io的相关函数。

标准IO与文件IO的区别

标准io是库函数,是系统调用的封装。

文件io是系统调用,是linux内核中的函数。

标准io有缓存,文件io无缓存

文件流指针、文件描述符

文件IO

1、文件的打开与关闭(open/close)

操作步骤为:

打开文件->操作文件   ->关闭文件

联系:在标准io中打开文件使用的是fopen函数:fopen(“str.txt”“w”);

打开文件:
        open 
        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_APPEND    追加
                O_ASYNC     异步IO
                O_CREAT     文件不存在创建        //使用到该标识符需要带参数3mode,来限定穿件文件的权限。
                O_TRUNC     文件存在截断(清0)
        返回值:
            成功返回文件描述符(很小的非负整数)
            失败返回-1 

        新生成的文件描述符总是为尚未被使用的最小的非负整数

        0: stdin
        1: stdout
        2: stderr

关闭文件:
        close 
        int close(int fd);
        功能:
            将fd对应的文件描述符关闭


2、读写函数( read/write )

1.write
          ssize_t write(int fd, const void *buf, size_t count);
          功能:
            向fd对应的文件中写入buf指向的count个字节
          参数:
            fd:文件描述符
            buf:写入数据空间首地址
            count:写入的字节数
          返回值:
            成功返回实际写入字节数
            失败返回-1 

 2.read 
          ssize_t read(int fd, void *buf, size_t count);
          功能:
            从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中
          参数:
            fd:文件描述符 
            buf:存放数据空间的首地址
            count:想要读取数据字节数
          返回值:   
            成功返回实际读到的字节数
            失败返回-1 
            读到文件末尾返回0 
 

知识补充:关于linux文件权限的说明

rwxrwxrwx

每组rwx分别表示创建人员的权限,同组人员的权限,其他人员的权限


作业:
1.利用read和write实现文件内容的拷贝(将src.jpg中的内容拷贝到dst.jpg文件中)

作业分析:函数写的过于死板,缺乏扩展性。

更改:

2.1028:人口普查
  https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805293282607104?type=7&page=0

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值