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

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

    教材学习内容总结

    10.1 Unix I/O

    Unix中所有的I/O设备都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。

    10.2打开关闭文件

    1、打开文件:

    int open(char *filename, int flags,mode_t mode);

    其中,括号内第一个参数为文件名,第二个参数为访问文件的方式(3种),第三个参数为访问权限位(mode&~umask)。

    2、关闭文件:

    int close(int fd);   

    10.3读写文件

    读:ssize_t read(int fd, void *buf, size_t n);
    写:ssize_t write(int fd, const void *buf, size_t n);

    注意ssize_t和size_t有区别。

    10.3RIO包读写

    1、RIO包会自动处理不足值。

    2、分两类函数:无缓冲的输入输出函数 (二进制)、带缓冲的输入函数(二进制+文本行)。

    3、第一类读写:

    读:ssize_t rio_readn(int fd,void *usrbuf,size_t n);
    写:ssize_t rio_writen(int fd,void *usrbuf,size_t n);

    4、第二类读(三个函数):

    带缓冲顾名思义就先联系缓冲区:
    void rio_readinitb(rio_t *rp,int fd);
    接着读:
    ssize_t rio_readlineb(rio_t *rp,void *usrbuf,size_t maxlen);
    ssize_t rio_writen(rio_t *rp,void *usrbuf,size_t n);

    10.5读文件元数据

    1、文件元就是文件信息,调用stat和fstat函数检索到关于文件的信息

    int stat(const char *filename,struct stat *buf);
    int fstat(int fd,struct stat *buf);

    2、其中st_size成员包含了文件的字节大小。st_mode为文件访问许可位。

    10.6共享文件

    1、三个结构:
    描述符表:独立 文件表:多部分组成,进程共享。 v-node表:进程共享。 2、关键:每个描述符有自己的文件位置,不同操作符的读就可以从文件不同位置获取数据。

    10.7I/O重定向

    1、使用dup2函数重定向。

    int dup2(int oidfd,int newfd);

    2、这节看了很久,从例子入手后看懂了:以前两个描述符指向A、B两个文件,现在调用上述函数后,都指向一个文件(假如说是B),A就被关闭了,其文件表和v-node表删除,B的引用计数增加;以后的数据重定向到文件B。

    10.8标准I/O

    1、

    标准I/O库(libc):高级输入输出函数
    fopen/fclose:打开和关闭文件
    fread/fwrite:读和写字节
    fgets/fputs:读和写字符串
    scanf/printf:复杂格式化的I/O函数

    2、每个程序开始时都有三个打开的流:

    stdin:标准输入
    stdout:标准输出
    stderr:标准错误

    教材学习中遇到的问题:

    10.1:

    open函数返回值:若成功则为新文件的描述符,若出错则为-1

    每个进程开始时都会打开三个文件:标准输入、标准输出、标准错误。它们的描述符分别为0、1、2。所以,fd1返回的描述符为3。之后调用了close函数,释放描述符3。所以fd2的返回值也就是描述符为3

    10.2:

    如图10-12。fd1和fd2对应不同的描述符表,也对应不同的文件表项,但是它们对应的v-note表一样,都是打开foobar.txt。所以读foobar的第一个字节,输出f

    10.3:

    如图10-13。首先你得知道子进程就相当于对父进程的复制,ok所以父进程中描述符表、文件表、v-note表对应关系和子进程一样。描述符fd在父子进程中指向同一个文件表项。因此子进程读完后,父进程读到的为o,输出o

    10.4:

    dup2(A,B)指将B重新定向到A,也是把A拷贝到B 标准输入的描述符为0

    10.5:

    dup2(fd2,fd1)将fd2拷贝到fd1,fd1被重新定向为fd2。所以再次执行read后,输出为o

    代码中遇到的问题:

    一开始编译书上p598的代码发现并没有“csapp.h”:

    解决办法: 看到书p597的代码上面的头文件,进行尝试,成功编译并运行:

    这三个头文件和“csapp.h”等价。

    代码托管:

    参照老师的评论本周代码托管做成了链接形式:

    点我点我!

    并用相关指令进行了统计:

    心得体会:

    内容看似很少,不过比以前的难懂,同样花了很多时间看书,我的心得是看这一章一定要学会找不同,这很关键;从下周起想重新学一下c语言,感觉现在看书上一些基本的代码很吃力。

    学习进度条

     代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
    目标 5000行 30篇 400小时  
    第7周 67/472 1/10 20/151  
  • 相关阅读:
    PAT (Advanced Level) 1080. Graduate Admission (30)
    PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
    PAT (Advanced Level) 1078. Hashing (25)
    PAT (Advanced Level) 1077. Kuchiguse (20)
    PAT (Advanced Level) 1076. Forwards on Weibo (30)
    PAT (Advanced Level) 1075. PAT Judge (25)
    PAT (Advanced Level) 1074. Reversing Linked List (25)
    PAT (Advanced Level) 1073. Scientific Notation (20)
    PAT (Advanced Level) 1072. Gas Station (30)
    PAT (Advanced Level) 1071. Speech Patterns (25)
  • 原文地址:https://www.cnblogs.com/bosswsc/p/6060102.html
Copyright © 2011-2022 走看看