• 基础I/O接口与操作


    C语言中的文件接口

    1 打开文件

      FILE * fopen(const char * path,const char * mode)

      参数:path:文件路径  mode:打开文件的方式

      返回值:成功返回一个文件流指针,失败返回NULL

      举例:打开当前目录下的myfile文件,以只读方式打开

        FILE* fd = fopen("myfile", "r");

      mode的方式:可以得到:

        通过man fopenke

    2 关闭文件,释放文件流指针

      int fclose(FILE* fp);

      参数:fp:需要关闭的文件流指针

      返回值:成功返回0,失败返回EOF

      举例:关闭之前的fd文件流指针

        fclose(fd)

    3 读文件

      size_t fread(void* readBuff,size_t size,  size_t count, FILE* fp);

      参数:readBuff:用于接收数据的内存地址  size:一次读几个字节  count:读几次  fp:已经打开的文件流指针

      返回值:成功返回读取的字节个数(一般情况下=count*size,有时也会发生读到的个数<count*size的情况),不成功读到文件的末尾,返回0

      举例:将之前的fd中的内容读到buff中:size_t readsize = fread(buff, 1, 1024, fd);

    4 写文件

      size_t fwrite(const void* buff, size_t size, size_t count, FILE* ostream);

      参数:buff:一个存放数据的地址,该地址中的内容将要被写入ostream文件流指针所打开的文件里  size:一次要写的字节数  count:需要写几次

      返回值:成功返回写的字节数

    5 查看文件指针是否到达文件末尾

      int feof(FILE* fp);

      参数:fp:文件流指针

      返回值:到达结尾返回非零值,未到达返回0

     6 设置文件流指针的位置

      int fseek(FILE* stream, long offset, int whence);

      参数:stream:文件流指针  offset:相对于whence的偏移值    whence:通常设置为三个值(SEEK_CUR(当前位置)、SEEK_END(文件末尾)、SEEK_SET(文件开始))

      返回值:成功返回0,失败返回非零

    7 文件流指针相对于文件开始的偏移字节数

      long ftell(FILE* fp);

      返回值:成功返回偏移的字节 数失败返回-1

    系统文件I/O

    1 打开文件

      int open(const char *pathname, int flags);

      int open(const char *pathname, int flags, mode_t mode);

      参数:pathname:文件路径    mode:打开方式(如下第二张图)  flags:函数选项(可以是用 ' | ' 传递多个选项实现不同功能)

      常用的打开文件选项:

        O_RDONLY(只读方式打开)  O_WRONLY(只写方式打开)  O_RDWR(读写方式打开)  

    2 关闭文件

      int close(int fd);

      参数:传入文件描述符即可,切记操作完成之后关闭文件描述符,防止内存泄漏

    3 读文件

      ssize_t read(int fd, void* buff, size_t count);

      参数:fd:文件描述符  buff:将读到的内容存到buff中  count表示要读几个字节

    4 写文件

      ssize_t write(int fd, void* buf, size_t count)

      参数:fd:文件描述符  buf:将buf中的数据写到文件中  count:要写的文件的字节数

    注意系统函数和系统调用的关系一目了然,可以认为f系列函数是对系统调用的封装,方便二次开发

    文件描述符

    1 linux进程在默认情况下会打开三个文件描述符,分别是0,1,2;它们分别代表标准输入,标准输出,标准错误

    2 当我们打开文件时,操作系统要在内存中创建相应的数据结构来描述目标文件,于是就有了files_struct结构体,表示一个已经打开的文件对象。而进程在执行open系统调用,

    所以会放让进程和文件关联起来,每个进程pcb都有一个*files指针,指向files_struct结构体中的一个数组,该数组的下标就是文件描述符,每一个元素都是指向打开文件的指针。

    3 文件描述符的分派规则

      在files_struct中,找到当前没有被使用的最小的小标作为新打开文件的文件描述符;例如,当手动关闭标准错误文件描述符时,当再新建一个文件的时候,新文件的文件描述符就为3;

        

  • 相关阅读:
    Android之在linux终端执行shell脚本直接打印当前运行app的日志
    webpack打包vue项目之后生成的dist文件该怎么启动运行
    Android工程中javax annotation Nullable找不到的替代方案
    绝对良心提供百度网盘的jdk1.8源码下载包含sun包的
    上周热点回顾(12.23-12.29)团队
    上周热点回顾(12.16-12.22)团队
    k8s 开船记:升级为豪华邮轮(高可用集群)与遇到奇怪故障(dns解析异常)团队
    上周热点回顾(12.9-12.15)团队
    k8s 开船记-修船:改 readinessProbe ,去 DaemonSet ,上 Autoscaler团队
    k8s 开船记-触礁:四涡轮发动机撞坏3个引发502故障团队
  • 原文地址:https://www.cnblogs.com/love-you1314/p/10461898.html
Copyright © 2020-2023  润新知