系统调用之文件IO

学习完使用标准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文件中)

系统调用之文件IO_第1张图片

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

更改:

系统调用之文件IO_第2张图片

系统调用之文件IO_第3张图片

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

你可能感兴趣的:(前端,开发语言,c语言)