zoukankan      html  css  js  c++  java
  • 20145335郝昊 《信息安全系统设计基础》第9周学习总结

    20145335郝昊 《信息安全系统设计基础》第9周学习总结

    教材学习内容总结

    • 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程。 输入操作:从I/O设备拷贝数据到主存、输出操作:从主存拷贝数据到I/O设备

    • Unix I/O是一个简单低级的应用接口,可以把所有的输入输出当作对文件的读写来执行。
      - 打开文件:标准输入描述符为0、标准输出描述符为1、标准错误描述符为2.
      - 改变当前的文件位置:文件位置是从文件开头起始的字节偏移量。
      - 读写文件:从当前文件位置开始。当大于文件长度的时候出发EOF条件。
      - 关闭文件。

    • open函数int open(char *filename,int flags,mode_t mode);
      - flages参数指明进程打算如何访问该文件O_RDONLY:只读O_WRONLY:只写O_RDWR:可读可写``O_CREAT:如果文件不存在就创建一个截断的(空)文件O_TRUNC:如果文件已经存在,就截断它。O_APPEND:每次写操作前,设置文件位置到文件的结尾处。
      - mode参数指定新文件的访问权限位,每个进程都有一个umask,是通过调用umask函数来设置的。当进程通过带某个mode参数的open函数调用来创建一个新文件时,文件的访问权限位被设置为mode & ~umask

          - 进程通过调用close函数关闭一个打开的文件:`int close(int fd);`
      
    • read函数:从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf,返回值-1表示错误,返回值0表示EOF。
      - readwrite传送的字节一般比应用程序要求的少,不足值产生的情况有:
      - 读时遇到EOF
      - 从终端读文本行
      - 读和写网络套接字

    • RIO包可自动处理不足值。 ssize_t rio_readn(int fd,void *usrbuf,size_t n);
      - 无缓冲的输入输出函数:直接在存储器和文件之间传送数据。
      - 带缓冲的输入函数:允许从文件中读取文本行和二进制数据,文件内容缓存在应用级缓冲区内。

    • 应用程序通过调用statint stat(const char *filename,struct stat *buf);和fststint fstat(int fd,struct stat *buf);

    • 函数检索关于文件的信息。

    教材学习中的问题和解决过程

    • 本章内容是关于系统及I/O的知识点,在之前几章的学习都有所接触问题总的不大,但是在10.2中关于打开和关闭文件的open函数中的第三个参数的使用存在问题。书上p597写了一个例子,文件的拥有者有读写权限,而其他的用户都有读权限。而答案为什么给出的是umask(DEF _ UMASK);fd = Open("foo.txt",O _CREATE|O _TRUNC|O _WRONLY,DEF _MODE); 给出的O _WRONLY是只读,而并不是读写操作,是如何完成的读写操作?而其也具体的权限参数是什么?根据上面的解释知道是Open函数的第二个flags参数是指明了进程打算如何访问这个文件,第三个mode _t mode 参数是指明文件的访问权限,结合图10—1会知道具体的访问权限。后来通过看书,发现自己忽略掉了一点就是每个进程都有一个umask,它是通过调用umask函数来设置的。这样以来之前对于这个答案有所定义给定了mode和umask默认值: #define DEF _MODE S _IRUSR|S _IWUSR|S _IRGRP|S _ IWGRP|S _IROTH|S _IWOTH #define DEF _UMASK S _IWGRP|S _IWOTH,这样在结合之前的Open函数就解决了我的问题。

    代码调试中的问题和解决过程

    • 在完成练习题10.1时候出现了问题

      通过查询csapp.h是是一堆头文件的打包,linux应该没有自带csapp.h。于是更改了头文件,编译成功。

    • man k 命令的使用

    本周代码托管截图

    代码托管链接:https://git.oschina.net/20145335/Linux-besti-is-20145335

    其他(感悟、思考等,可选)

    本章的知识主要是关于I/O设备,这方面的知识在之前也都有所接触。所以有些理解起来比较方便,存在的问题多动手操作书上的例子都是可以得到解决的。虽然这些系统及I/O的知识对于编程看起来没有什么太大的帮助,但是对于理解计算机系统的确有着很大的作用,只有掌握了基本的知识,才能再此基础上运用更高一层的知识。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20 掌握核心的linux命令,了解了linux操作系统
    第二周 300/500 2/4 18/38 学会了虚拟机上的C编程
    第三周 500/1000 3/7 22/60 初步学习计算机中各种数的表示和运算
    第五周 300/1300 2/9 30/90 通过学习汇编,了解逆向的思想应用
    第六周 300/1500 2/11 28/110 安装了Y86处理器,了解了ISA抽象
    第七周 150/1700 2/13 30/130 学习了存储器的体系结构|
    第八周 200/1900 2/15 30/150 复习前7章知识
    第九周 340/2100 1/17 31/170 学习了系统级I/O

    参考资料

  • 相关阅读:
    PL/SQL Developer使用技巧、快捷键(转发)
    Java 获取随机日期
    jsonArray和Java List对象互转,日期处理
    ExtJs grid单选,多选
    ExtJs 下拉单联动,次级下拉框查询模式
    ExtJs 日期相加,Grid表格列可编辑
    转:Java阳历转农历
    转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式
    钥匙计数之一
    LianLianKan
  • 原文地址:https://www.cnblogs.com/20145335hh/p/6057697.html
Copyright © 2011-2022 走看看