zoukankan      html  css  js  c++  java
  • 沉下心学操作系统(4)关于文件

    title

    [TOC]

    文件描述符

    ​ 每个进程控制块都有一个文件描述符表,可以把它看作一个数组,里面存储指向以打开文件地址的指针,这个数组的下角标就是文件描述符。每次open都会把新打开的文件地址存储到表中的某个空行,并返回下角标作为文件描述符。

    ​ 其中0~2为特殊的文件描述符,分别为标准输入,标准输出,标准错误输出,这三个文件描述符在进程初始时自动打开,其中标准输出就是printf输出的对象

    关于I/O的系统调用函数

    open()

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    int open(const char* pathname, int flags, mode_t mode);

    ​ 相比fopen()处于系统的更低层,可以对文件进行更基础的操作,但是也失去了一些库函数的帮助

    ​ 参数分别是被打开文件路径、进行的操作、创建文件时的使用权限(可省略)

    ​ 它的返回值为文件描述符

    dup2()

    #include <unistd.h>
    int dup2(int oldfd, int newfd);

    ​ 该函数可以使newfd指向oldfd指向的文件

    dup()

    大专栏  沉下心学操作系统(4)关于文件lass="code">
    #include <unistd.h>
    int dup(int oldfd);

    ​ 该函数会选择最小的空闲文件描述符让它指向oldfd,并返回新的指向该文件的描述符

    read()、write()

    #include <unistd.h>
    ssize_t read(int fd, void* buf, size_t count);
    ssize_t write(int fd, const void* buf, size_t count);

    ​ 参数分别为文件描述符,写入/读入的内容,写入/读入的最大长度。若调用成功返回实际读写的长度,否则返回-1

    lseek()

    #include <sys/types.h>
    #include <unistd.h>
    off_t lseek(int fd, off_t offset, int whence);

    ​ 参数分别为文件描述符,移动的长度,移动目标的起点。whence有3个常用值,SEEK_SET,SEEK_END,SEEK_CUR,分别代表开头,结尾和当前位置

    fsync()

    int fsync(int fd);

    ​ 由于向磁盘写入数据很花时间,因此内核为了提高效率会推迟写入数据。而fsync()可以同步内存中所有已修改的文件写入到储存设备

    close()

    int close(int fd);

    ​ 用于关掉文件,fd为文件描述符

  • 相关阅读:
    【转】为什么要报考系统架构设计师考试
    前端三大主流框架中文文档
    零散知识点-类的区别;函数式编程的简单总结;
    window.location相关方法
    Hybrid相关
    php中file_get_contents与curl的区别
    三级下拉菜单
    微信生成带参数二维码及响应操作
    开发中因长时间不用而遗忘的,持续补充中。。
    项目中用到的几个工具函数
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12361029.html
Copyright © 2011-2022 走看看