• 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  
  • 相关阅读:
    Ubantu 安装Redis
    传说中的WCF(5):数据协定(a)
    传说中的WCF(4):发送和接收SOAP头
    传说中的WCF(3):多个协定
    传说中的WCF(2):服务协定的那些事儿
    传说中的WCF(1):这东西难学吗?
    Linq教程
    Installutil.exe的位置和路径
    uni-app中对输入框的判断与提示(密码格式为6-12位,必须有大小写字母和数字组成)
    uni-app系列回顾总结----项目国际化
  • 原文地址:https://www.cnblogs.com/bosswsc/p/6060102.html
Copyright © 2020-2023  润新知