zoukankan      html  css  js  c++  java
  • 2018-2019-1 20165316 《信息安全系统设计基础》第六周学习总结

    2018-2019-1 20165316 《信息安全系统设计基础》第六周学习总结

    教材学习内容总结

    10.1 Unix I/O

    • 一个Unix文件就是一个m个字节的序列。
    • 所有的I/O设备,如网络、磁盘和终端,都被模型化为文件,所有的输入和输出都被当做对相应的文件的读和写来执行。
    • 打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标示这个文件,应用程序只需记住这个描述符。
    • Linux shell创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)。头文件<unistd.h>定义了常量STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,可用来代替显式的描述符值。
    • 改变当前文件的文件位置。对于每个打开的文件,内核保持着一个文件位置k,初始为0.这个文件位置是从文件开头起始的字节偏移量。应用程序能够通过执行 seek 操作,显式地设置文件的当前位置为 k。
    • 读写文件:一个读操作就是从文件复制 n>0 个字节到内存,从当前位置 k 开始,然后将 k 增加到 k+n ;写操作就是从内存复制 n>0 个字节到一个文件,从当前位置 k 开始,然后更新 k。
    • 关闭文件:当应用完成了对文件的访问之后,它就通知内核关闭这个文件。作为响应,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。无论一个进程因为何种原因终止时,内核都会关闭所有打开的文件并释放它们的存储器资源。

    10.2 文件

    每个 Linux 文件都有一个类型(type)来表明它在系统中的角色。

    • 普通文件(regular file)包含任意数据。应用程序常常要区分文本文件(text file)和二进制文件(binary file)文本文件是只含有 ASCII 或 Unicode 字符的普通文件;二进制文件是所有除了文本文件的其他文件。对内核而言,文本文件和二进制文件没有区别。
    • 目录(directory)是包含一组链接(link)的文件,其中每个链接都将一个文件名(filename)映射到一个文件,这个文件可能是另一个目录。
    • 套接字(socket)是用来与另一个进程进行跨网络通信的文件。

    10.3 打开和关闭文件

    进程是通过调用open函数来打开一个已存在的文件或者创建一个新文件的:

    open函数将filename转换为一个文件描述符,并且返回描述符数字。返回的描述符总是在晋城中当前没有打开的最小描述符。flags参数指明了进程打算如何访问这个文件:

    O_RDONLY:只读

    O_WRONLY:只写

    O_RDWR:可读可写

    例如,下面的代码说明如何以读的方式打开一个已存在的文件:

    fd = open("foo.txt",O_RDONLY,0);

    flags参数也可以是一个或者更多位掩码的或,为写提供给一些额外的指示:

    O_CREAT:如果文件不存在,就创建它的一个截断的(空)文件

    O_TRUNC:如果文件已经存在,就截断它

    O_APPEND:在每次写操作前,设置文件位置到文件的结尾处

    例如,下面的代码说明的是打开一个已存在的文件,并在后面添加一些数据:

    fd = open("foo.txt",O_ WRONLY | O_APPEND,0)

    读和写文件

    应用程序是通过分别调用read和write函数来执行输入和输出的:

    • read 函数从描述符为 fd 的当前文件位置复制最多 n 个字节到内存位置 buf。返回值 -1 表示一个错误,而返回值 0 表示 EOF。否则返回值表示的是实际传送的字节数量。
    • write 函数从内存位置 buf 复制至多 n 个字节到描述符 fd 的当前文件位置。

    I/O重定向

    Linux shell提供了I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来。例如,键入

    unix > ls > foo.txt
    

    使得 shell 加载和执行 ls 程序,将标准输入重定向到磁盘文件 foo.txt。I/O重定向一种工作方式是使用dup2函数:

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

    代码托管

    上周考试错题总结

    无错题

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
    目标 1000行 30篇 400小时
    第一周 156/200 2/2 20/20
    第二周 121/200 2/2 18/30
    第三周 107/200 2/2 15/30
    第四周 111/200 2/2 16/30
    第五周 101/200 1/1 18/30
    第六周 110/200 2/2 19/30
  • 相关阅读:
    day_15补充加总结
    Day_15 内置模块er
    sort 函数 与 sorted 函数区别
    python 代码风格------------PEP8规则
    python 返回值
    函数记忆 : startswith() 与 endswith
    RE模块使用
    正则表达式
    collections
    函数datetime
  • 原文地址:https://www.cnblogs.com/treebeard123/p/9906620.html
Copyright © 2011-2022 走看看