第十章 学习总结

第十章 系统级别

10.1 Unix I/O

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

打开文件 改变当前的文件位置 读写文件 关闭文件

10.2 打开和关闭文件

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

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

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

open函数将filename转化为一个文件描述符,并且返回描述符数字。 返回的描述符总是在进程中当前没有打开的描述符。

flag参数指明了进程打算如何访问这个文件:

O_RDONLY:只读

O_WRONLY:只写

O_RDWR:可读可写。

flag参数也可以是一个或更多位掩码的或

O_CREAT:如果文件不存在,就创建它的一个截断的文件

O_TRUNC:如果文件已经存在,就截断它

O_APPEND:在每次写操作前,设置文件位置到文件的结尾处。

mode参数指定了新文件的访问权限位。

10.3 读和写文件

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

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t n);

ssize_t write(int fd, const void *buf,size_t n);

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

在某些情况下,read和write传送的字节比应用程序要求的要少。这些不足值不表示有错误,出现这些情况的原因如下:

读时遇到EOF

从终端读文本行

读和写网络套接字

10.4 用RIO包健壮地读写 一个I/O包,称为RIO包,它会自动为你处理上文中所述的不足值。RIO包提供了方便,健壮和高效的I/O。RIO提供了两种不同的函数:

无缓冲的输入输出函数

带缓冲的输入函数

10.5 读取文件元数据

应用程序能够通过调用stat和fstat函数,检索到关于文件的信息。(有时候也称为文件的元数据)

stat函数以一个文件名作为输入

fstat函数是相似的,只不过是以文件描述符而不是文件名作为输入。

10.6 共享文件

描述符表:每个进程都有它独立的描述符表,它的表项是由进程打开的文件描述符来索引的,每个打开的描述符表项指向文件表中的一个表项。

文件表:打开文件的集合是由一张文件表来表示的,所有的进程共享这张表。每个文件表的表项组成包括有当前的文件位置,引用计数,以及一个指向v-node表中对应表项的指针。关闭一个描述符会减少相应的文件表表项中的引用计数。内核不会删除这个文件表表项,直到它的引用计数为零。

v-node表:同文件表一样,所有的进程共享这张v-node表。每个表项包含stat结构中的大多数信息,包括stmode和stsize成员。

10.7 I/O重定向

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

10.8 标准I/O

ANSI C定义了一组高级输入输出函数,称为标准I/O库,为程序员提供了Unix I/O的较高级别的替代。

标准I/O库将一个打开的文件模型化为一个流。一个流就是一个指向FILE类型的结构的指针。

实验楼: 课本实验已经在虚拟机上运行。

参考:深入理解计算机系统第十章

时间: 2024-10-15 11:36:27

第十章 学习总结的相关文章

第九周 第十章学习

学习任务 (一)第十章概念 1.输入\输出(I\O)是主存和外部设备之间拷贝数据的过程.(输入)I\O→主存(输出)主存→I\O. 2.了解Unix I/O将帮助你理解其他的系统概念:有时你除了使用Unix I/O外别无选择. 10.1 所有的I/O设备,如网络.磁盘和终端,都被模型化为文件,而所有的输入和输出都被当做对相应的文件的读和写来执行.这种将设备优雅地映射为文件的 方式,允许Unix内核引出一个简单.低级的的应用接口,称为Unix I/O,这使得所有的输入和输出都能以一种统一且一致的方

《构建之法》第十章学习总结

第十章讲的是关于典型用户和场景的内容. 在第一节当中,为我们介绍了Visual Studio的典型用户.典型用户的价值.怎样定义典型用户还有从典型用户到场景到任务的转变,还简单介绍了场景故事story的模板: 在第二节当中,为我们介绍了用例(Use Case),用例的基本元素包括标题.角色.主要成功场景.步骤和扩展场景: 在第三节当中,为我们介绍了规格说明书(Spec),它可以分为两种:软件功能说明书(Function Spec)和软件技术说明书(Technical Spec): 在第四节当中,

构建之法第十章学习

第十章讲的是关于典型用户和场景的内容. 在第一节当中,为我们介绍了Visual Studio的典型用户.典型用户的价值.怎样定义典型用户还有从典型用户到场景到任务的转变,还简单介绍了场景故事story的模板: 在第二节当中,为我们介绍了用例(Use Case),用例的基本元素包括标题.角色.主要成功场景.步骤和扩展场景: 在第三节当中,为我们介绍了规格说明书(Spec),它可以分为两种:软件功能说明书(Function Spec)和软件技术说明书(Technical Spec): 在第四节当中,

201671010107 2016-2017-2 《Java程序设计》第十章学习心得

通过这一章的学习,我知道了Java的抽象窗口工具箱包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类.Swing用户界面库是非基于对等体的GUI工具箱,Swing类库被放在java.swing包中.AWT与Swing是继承的关系.还学会了创建框架,添加组件,确定框架的大小,在组件中显示信息等.

父与子的编程之旅第十章学习

今天下午码了一下午代码,初学Python,希望通过自己敲代码能够学的更快,事实证明,自己敲代码的确是值得的,编译的时候出现很多错误,有漏掉字母,逗号句号混乱等等低级错误,通过软件给的提示,慢慢找,也解决了,这个是一个游戏的代码,大家可以稍微感受下,下面来几张图: 上面是部分代码,下面看下运行后的图: 效果还不错,虽然码代码很累,但是看到自己辛辛苦苦做出来的成果还是很开心,希望有一天自己可以按照自己想法写一个小游戏. 从菜鸟到高手,路还长,慢慢来.

第十章学习笔记总结

10.1 Unix I/O 一个Unix文件就是一个m个字节的序列,所有的I/O设备都被模型化为文件,所有的输入和输出都被当做对应的文件的读和写操作来执行. 打开文件 一个应用程序通过要求内核打开相应的文件,来宣告他想要访问一个I/O设备,内核返回一个小的非负整数叫做描述符,他在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息,应用程序只需记住这个描述符. Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0),标准输出(1),标准错误(2). 改变当

《Java从入门到精通》第十章学习笔记

第10章 Java集合类 一.概述 Java中的java.util包中提供了一些集合类,也被称为容器,不同于数组,集合的长度是可变的,存放的是对象的引用.常用的集合有List集合.Set集合.Map集合,其中List和Set实现了Collection接口. 二.集合类接口的常用方法 1.List接口的常用方法:因为继承了Collection接口,所以List接口也继承了Collection中的所有方法.List集合以线性有序的方式存储对象.List集合中可以包含重复的对象,的主要方法如下: (1

201671010142 2017-2 《java第十章学习感悟》

组件:Java把由Component类的子类或间接子类创建的对象称为一个组件. 容器:是Java中能容纳和排列组件的组件. Container类提供了一个方法add(),用来在容器类组件对象中添加其他组件. 通过调用Toolkit类的方法来得到屏幕尺寸信息. Graphics2D类的setPaint方法(Graphics类为setColor方法)用来设置颜色. 在Java应用程序中,一旦图像保存在本地或因特网的某个位置上,就可以将它们直接读入到java应用程序中.

20165115 2017-2018-2 《Java程序设计》第五周学习总结

20165115 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 第七章学习的内容是内部类与异常类.其中,异常类在解决错误情况的处理上就有很大的作用.特别是在实际操作一些大的程序时,如果不进行边界检测,让程序对可能出现的错误情况做出反应,就很可能会导致实际运行时出现各种各样的问题.我对第七章的内容稍微总结了一下: try-catch语句 Java使用try-catch语句来对异常情况进行处理.其中,try部分放入可能出现的异常情况,当其中某个方法调用发生异常后,t