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

  • I/O:在主存和外部设备(例如磁盘存储器、终端和网络)之间复制数据的过程。
  • 输入操作是从 I/O设备复制数据到主存,而输出操作是从主存复制数据到 I/O设备。
  • 所有I/O设备都被模型化为文件。
  • Linux shell创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)
  • 每个Linux文件都有一个类型来表明它在系统中的角色:
    1、普通文件包含任意数据;2、目录是包含一组链接的文件;3、套接字是用来与另一个进程进行跨网络通信的文件;
  • 对内核而言,文本文件和二进制文件没有任何区别。区别是相对应用程序而言的。
  • 在某些情况下,read和write传送的字节比应用程序要求的要少。这些不足值不表示有错误。出现这样情况的原因有:
    1、读时遇到EOF;2、从终端读文本行;3、读和写网络套接字;
  • st_size成员包含了文件的字节数大小。st_mode成员则编码了文件访问许可位。
  • 内核用三个相关的数据结构来表示打开的文件:
    1、描述符表;2、文件表;3、v-node表
    典型的打开文件的内核数据结构:

    文件共享:
  • 读和写文件
    在系统I/O中读写文件用的系统函数为read()和write()函数来执行
#include <unistd.h>
ssize_t read(int fd,void * buf,size_t n);
ssize_t write(int fd,void *buf,size_t n);

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

原文地址:https://www.cnblogs.com/zhangshuai9345/p/9906229.html