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为文件描述符

  • 相关阅读:
    css之overflow注意事项,分析效果没有实现的原因及解决
    Leetcode- 299. Bulls and Cows
    Leetcode-234. Palindrome Linked List
    Leetcode-228 Summary Ranges
    Leetcode-190. Reverse Bits
    盒子模型的理解
    css各类伪元素总结以及清除浮动方法总结
    Leetcode-231. Power of Two
    Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_0_vue__.default.user is not a
    git commit -m ''后报eslint错误
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12361029.html
Copyright © 2011-2022 走看看