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

    20145338 索朗卓嘎《信息安全系统设计基础》第9学习总结

    教材学习内容总结

    10.1 Unix I/O

    (1)一个Unix文件就是一个m个字节的序列:B0,B1,B2,B3...Bk...Bm-1。

    (2)所有的I/O设备,如网络、磁盘盒终端,都被模型化为文件,而所有的输入和输出都被当做对相应的文件的读和写来执行。这是一种应用接口,成为Unix I/O。

    这使得所有的输入和输出都能以一种统一且一致的方式来执行:

    ①打开文件

    ②改变当前的文件位置。

    ③读写文件。

    ④关闭文件。

    (3)①输入是从I/O设备拷贝数据到主存,输出是从主存拷贝数据到I/O设备。

    ②一个文件就是一个字节序列。

    ③所有的I/O设备,如网络、磁盘、和终端,都被模型化为文件,而所有的输入和输出都被当做想对应的文件的读写来执行。

    10.2 打开和关闭文件

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

    include <sys/types.h>

    include <sys/stat.h>

    include <fcntl.h>

    include <unistd.h>

    (2)创建一个新文件,文件的拥有者有读写权限,而所有其他的用户都有读权限

    umask(DEF_UMASK);

    fg=Open("foo.txt",O_CREAT|O_TRUNC|O_WEONLY,DEF_MODE);

    (3)通过调用close函数关闭一个打开的文件

    int close(int fd);//返回值成功为0,出错为-1

    10.3 读和写文件

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

    (2)read函数从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf,返回值-1表示一个错误。而返回值0表示EOF。否则,返回值表示的是实际传送的字节数量

    (3)write函数从存储器位置buf拷贝至多n个字节到描述符fd的当前文件位置

    (4)通过调用lseek函数,应用程序能够显示地修改当前文件的位置

    (5)在某些情况下,read和write传送的字节比应用程序要求的要少,这些不足值不表示有错误

    ①读时遇到EOF。假设我们猪呢比读一个文件,该文件从当前文件位置开始只含有20多个字节,而我们以50个字节的片进行读取。这样一来,下一个read返回的不足值为20,此后的read将通过返回不足值0来发出EOF信号。

    ②从终端读文本行。如果打开文件是与终端相关联的(如键盘和显示器),那么每个read函数将以此传送一个文本行,返回的不足值等于文本行的大小。

    ③读和写网络套接字。如果打开的文件对应于网络套接字,那么内部缓冲约束和较长的网络延迟会引起read和write返回不足值。对Unix管道调用read和write时,也有可能出现不足值,这种进程间的通信机制不在我们讨论的范围之内。

    实际上,除了EOF,在读磁盘文件时,将不会遇到不足值,而且在写磁盘文件时,也不会遇到不足值。如果想创建简装的诸如web服务器这样的网络应用,就必须通过反复调用read和write处理不足值,直到所有需要的字节都传送完毕。

    10.4 用RIO包健壮地读写

    (1)RIO包:健壮的包,会自动为你处理之前所述的不足值
    RIO提供两种不同函数
    ①无缓冲的输入输出函数:这些函数直接在存储器和文件之间传送数据
    通过调用rio_readn和writen函数
    如果rio_readn和writen函数被一个从应用信号处理程序的返回中断,那么每个函数都会手动重启rio_readn或writen
    ②带缓冲的输入函数:这些函数允许你高效的从文件中读取文本行和二进制数据
    调用一个包装函数rio_readlineb,它从一个内部读缓冲区拷贝一个文本行,当缓冲区变空时,会自动地调用read重新填满缓冲区
    每打开一个描述符都会调用一次rio_readinitb函数
    对同一描述符,对rio_readlineb和rio_readnb的调用可以交叉进行,对这些带缓冲的函数的调用却不应和无缓冲的rio_readn函数交叉使用

    10.5 读取文件元数据

    应用程序能够通过调用stat和fstat函数,检索到关于文件的信息:元数据
    stat函数以一个文件名作为输入
    fstat函数以文件描述符作为输入
    stat数据结构中的st_size成员包含了文件的字节数大小,st_mode成员编码了文件访问许可位和文件类型
    对于内核文本文件和二进制文件毫无区别

    10.6 共享文件

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

    描述符表
    文件表
    v-node表

    10.7 I/0重定向

    (1)Unix外壳提供了I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来

    (2)重定向使用dup2函数

    10.8 标准I/O

    (1)Unix外壳提供I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来

    (2)I/O重定向工作:一种方式是使用dup2函数

    (3)dup2函数拷贝描述符表表项oldfd到描述符表表项newfd,覆盖描述符表表项newfd以前的内容。如果newfd已经打开,dup2会在拷贝oldfd之前关闭newfd

    本周代码截图

    参考资料

  • 相关阅读:
    进阶之路(基础篇)
    进阶之路(基础篇)
    进阶之路(基础篇)
    进阶之路(基础篇)
    进阶之路
    C语言连接MySQL数据库(转)
    Linux下mysql的远程连接(转)
    Linux 操作MySQL常用命令行(转)
    Linux(Ubuntu12.04)上玩儿STC单片机(转)
    信号量 Linux函数 semget();semctl();semop();(转)
  • 原文地址:https://www.cnblogs.com/SUONAM1114----/p/6052714.html
Copyright © 2011-2022 走看看