• 20145317《信息安全系统设计基础》第9周学习总结2


    20145317《信息安全系统设计基础》第9周学习总结2

    10.6 共享文件

    1. 对于内核而言,文件文件和二进制文件毫无区别。

    2. 共享文件

    内核用三种相关的数据结构来表示打开的文件。

    1)描述符表:它的表项由进程打开的文件描述符来索引的。每个打开的描述符表项指向文件表中的一个选项。
    2)文件表:打开文件的集合是一张文件表来表示的,所有的进程共享这张表。包括当前的文件位置、引用计数以及一个指向v-node表中对应表项的指针。
    3)v-node表:同文件表一样,所有的进程共享这张v-node表。每个表项包含stat结构中的大部分信息,包括st_mode和st_size成员。
    

                 

                   

                      

    10.7 I/O重定向

    1. I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来:

               unix > ls > foo.txt
      
    2. I/O重定向如何工作——使用dup2函数

       #include <unistd.h>
       int dup2(int oldfd, int newfd);
                         返回:若成功则为非负的描述符,若出错则为-1.
      

    实际是dup2函数(one case)。dup2函数对文件描述符表项进行重定位。

    10.8 标准I/O

    1. 标准I/O :ANSI C定义的一组高级输入输出函数。如fopen,fclose,fread,fwrite,fgets,fputs,scanf,printf。

    2. 标准IO库将一个打开的文件模型化为一个流,对于程序员来说,一个流就是一个指向类型为FILE结构的一个指针。每个ANSI C程序开始都有三个打开的流stdin,stdout,stderr,分别对应于标准输入、输出、错误:

      #include <stdio.h>
      extern  FILE  *stdin;
      extern  FILE  *stdout;
      extern  FILE  *sterr;
      

      !类型为FILE的流是对文件描述符和流缓冲区的抽象。

    10.9 该使用哪些I/O函数

    标准I/O流,从某种意义上而言是全双工的,因为程序能够在同一个流上执行输入和输出。但是有一些限定:

    1. 限制1: 跟在输出函数之后的输入函数。如果中间没有fflush,fseek,fsetpos或rewind的调用,一个输入函数不能跟随在一个输出函数之后。fflush清空与流相关的缓冲区,后三个函数使用unix I/O lseek函数来重置当前文件的位置。

    2. 限制2: 跟在输入函数之后的输出函数。情况类同上。 这些限定给网络应用带来一个问题:因为对套接字使用lseek是非法的。用Rio包可以解决这个问题。用sprintf把输出格式化一个字符串,通过riowriten输出,傅rioreadlineb来读一行,用scanf来从文本中提取不同的字段。

     

  • 相关阅读:
    echars 折线图使用
    echars 饼图使用
    React native中DrawerNavigator,StackNavigator,TabNavigator导航栏使用
    React native 中 SectionList用法
    React native 中使用Fetch请求数据
    React native中使用XMLHttpRequest请求数据
    实现在WebView中返回上一级
    DatePickerAndroid用法
    Lambda
    .Net常见线程安全问题整理
  • 原文地址:https://www.cnblogs.com/5317p/p/6059341.html
Copyright © 2020-2023  润新知