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

教材学习内容总结

Unix I/O

输入/输出 是在主存和外部设备之间拷贝数据的过程 一个Unix文件就是一个m字节的序列:B0、B1、、、Bk、、、Bm-1,如网络、磁盘、终端,都被模式化为文件,所有的输入输出都被当作对相应文件的读和写来执行。

打开文件:

内核返回描述符,以标识文件。内核记录有关打开文件的所有信息。unix创建每个进程都有:标准输入、标准输出、标准错误 改变当前的文件位置:这个文件位置是从文件开头起始的字节偏移量 读写文件 关闭文件

打开、关闭文件

int open(char*filename, int flags,mode_t mode); open 函数将filename转换为一个文件描述符,并且返回描述符数字 flags参数指明进程打算如何访问 mode参数指定新文件的访问权限

int close(int fd);

进程通过调用close函数关闭一个打开的文件,关闭一个已关闭的描述符会出错

读和写文件

应用程序是通过分别调用read和write函数来执行输入和输出。 RIO,会自动处理上文中所述的不足值。提供了无缓冲的输入输出函数和带缓冲的输入函数

RIO无缓冲的输入输出函数:调用rioreadn和riowriten

RIO带缓冲的输入函数:rio_readlineb,从一个内部读缓冲区拷贝一个文本行

每打开一个描述符都会调用一次rioreadinitb函数,它将描述符fd和地址rp处的一个类型为riot的读缓冲区联系起来 对同一描述符,对rio_readlineb和rioreadnb的调用可以任意交叉进行。然而对这些带缓冲的函数调用却不应和无缓冲的rioreadn交叉使用

读取文件元数据

应用程序能够通过调用stat和fstat函数,检索到关于文件的元数据 stat以文件名作为输入。fstat以文件描述作为输入 stsize成员 包括文件的字节数大小。stmode成员编码了文件的访问许可位和文件类型 普通文件包括某种类型的二进制或文本数据 目标文件包含关于其他文件的信息 套接字是一种用来通过网络与其他进程通信的文件

Unix提供的宏指令根据st_mode成员来确定文件的类型

宏指令:SISREG() 普通文件?二进制或文本数据 宏指令:SISDIR() 目录文件?包含其他文件的信息 宏指令:S_ISSOCK() 网络套接字?通过网络和其他进程通信的文件

教材学习中的问题和解决过程

man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用 grep -nr XXX /usr/include :查找宏定义,类型定义 man cp

在帮助文档中,通过/+关键词查找,向后查找:n,向前:N

grep -r递归查找-v反向查找

标准I/O库将一个打开的文件模型化为一个流。一个流就是一个指向FILE类型的结构的指针。每个ANSI C程序开始时都有三个打开的流:

include<stdio.h> extern FILE stdin; //标准输入,描述符0 extern FILE stdout; //标准输出,描述符1 extern FILE *stderr; //标准错误,描述符2```

类型为FILE的流是对文件描述符和流缓存区的抽象。流缓冲区的目的和RIO读缓冲区的一样,就是使开销较高的UnixI/O系统调用的数量尽可能的少。 各类I/O关系

Unix I/O是在操作系统内核中实现的。

较高级别的RIO和标准I/O函数都是基于Unix函数来实现的。 RIO函数是专为本书开发的read和write的健壮的包装函数。他们自动处理不足值,并且为读文本行提供一种高效的带缓冲的方法 标准I/O函数提供了Unix函数的一个更加完整的带缓冲的替代品,包括格式化的I/O例程。 标准I/O流,从某种意义上是全双工的,但对流的限制和对套接字的限制有时会相互冲突。 限制一:跟在输出函数之后的输入函数 限制二:分在输入函数的输出函数 由此,建议在网络套接字上不要使用标准 I/O函数来进行输入和输出,而要使用健壮的RIO函数。

问题解决

1.flags参数:

O_TRUNC:如果文件已经存在,就截断它。 如何理解截断?

在c++中ios:

:trunc与ios::out的效果应该是一样的,也就是打开文件的时候先将文件的内容清空,再进行写入。并不是删除文件。 截断后文件就是空文件了,所有文件指针可以说在最前面也是最后面。截断后文件还是那个文件(如果文件存在的话),但是内容没有了。 类比可知,O_TRUNC : 如果文件已存在,就截断它(长度被截为0,属性不变) 2.练习题10.1 代码输入后编译显示找不到csapp.h

解决:

通过搜索得知csapp.h是一堆头文件的打包,在http://csapp.cs.cmu.edu/public/code.html 这里可以下载,linux应该没有自带csapp.h。于是更改了头文件,编译成功。

时间: 2024-10-10 02:52:45

20145339 《信息安全系统设计基础》第九周学习总结的相关文章

20135223何伟钦—信息安全系统设计基础第九周学习总结

学习目的: 1. 掌握系统编程和系统调用的概念 2. 掌握系统编程错误处理的方式 3. 掌握Unix/Linux系统级I/O(open close read write seek stat) 4. 掌握RIO 5. 掌握I/O重定向的方法 一.Unix I/O Unix I/O定义:所有的I/O设备都被模型化为文件,所有的输入和输出都被当作 对相应文件的读和写来执行.这种将设备影射为文件的方式,称为Unix I/O (一)打开文件 (1)文件描述符:一个应用程序通过要求内核打开相应的文件,来宣告

20135219洪韶武-信息安全系统设计基础第九周学习总结

第九周学习总结 一.课本内容 1.每个unix文件都是一个m字节的序列:所有I/O设备如网络.磁盘和终端都被模型化为文件,而输入和输出就是对这些文件的读写操作. 2.unix系统中输入输出的操作: 打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备,内核返回一个小的非负整数,叫做描述符.unix系统创建每个进程的时候都有三个打开的文件:标准输入:标准输出,标准错误. 改变当前的文件位置.对于每个打开的文件,内核保持着一个文件位置k(从文件开头起始的字节偏移量). 读

20135234马启扬-——信息安全系统设计基础第九周学习总结

怎样学习系统编程(利用Linux学习Linux编程) 1 分析实用程序/bin, /usr/bin, /usr/local/bin学习使用工具,分析工具,了解功能和原理2 学习系统调用函数和系统调用本质上都是函数.不同的库,不同的头文件分析需要哪些系统调用,学习系统调用的使用方法:参数?返回值?3 编程实现利用上面的原理和一组协同工作的系统调用,自己编程实现使用程序的功能或积极主动抄代码,学习那些系统调用是协同工作的 C语言的学习可以参考这个思路,实现标准库伴随我们学习经常要问的三个问题:能做什

信息安全系统设计基础第九周学习总结—20135227黄晓妍

第十章系统级I/O 输入/输出(I/O)是主存和外部设备(I/O设备)(如磁盘驱动器.终端.网络)之间拷贝数据的过程.输入是从I/O设备拷贝到主存.反之则反. 学习Unix I/O的原因: 帮助理解其他的系统概念. 有时只能使用Unix I/O.例如:读取文件元数据(文件大小和创建时间).另外,使用标准I/O库进行网编程非常冒险. 10.1Unix I/O Unix文件就是一个m字节的序列:b0,b1,b2….bm-1.所有的I/O设备都被虚拟化为文件.所有的输入输出都是在当成相对应的文件的读写

信息安全系统设计基础第九周学习总结

(1)ls 用来显示文件的详细信息(用户名,群组名,大小,创建时间,读写执行权.) (2)who 如何查看当前登录的用户? -who am i 如何列出登录的用户? -who或-w (3)fileinfo显示文件信息 用来实现显示文件信息,建立了一个stat数据结构. 要先判断命令是否有操作数 (4)spwd列出当前目录 (5)mkdir命令用于创建一个新的目录.这个新的目录不仅可以使用绝对路径,也可以使用相对路径.但用户创建新目录的前提条件是:创建者对被创建新目录的父目录应有写权限. 如何在其

20135304刘世鹏——信息安全系统设计基础第一周学习总结

第一节 Linux系统简介 一.Linux是一个操作系统 1. Linux 本身只是操作系统的内核.内核是使其他程序能够运行的基础. 它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序 实际上都运行在内核之上. 2. Linux 内核具备了挑战 UNIX 的所有本质特性,包括 TCP/IP 网络,图 形界面系统 二.linux与windows的区别 Linux 免费或少许费用. Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体

信息安全系统设计基础第二周学习总结

学习目标 1. 熟悉Linux系统下的开发环境    2. 熟悉vi的基本操作    3. 熟悉gcc编译器的基本原理    4. 熟练使用gcc编译器的常用选项    5 .熟练使用gdb调试技术    6. 熟悉makefile基本原理及语法规范    7. 掌握静态库和动态库的生成 内容一:vim编辑器的使用 1.vim编辑器的三种模式 Ⅰ正常模式:(按Esc或Ctrl+[进入) 左下角显示文件名或为空 Ⅱ插入模式:(按i键进入) 左下角显示--INSERT-- Ⅲ可视模式:左下角显示—V

信息安全系统设计基础第二周学习总结(一)

Linux下C语言编程基础实验报告 学习任务 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 学习内容 1. 快捷键 2. vim 3. gcc 4. gdb 5. make与makefile 学习过程记录 第一部分 第一讲第一节:移动光标 H左.j下.k上.l右 第一讲第二节:VIM的进入和退出 <E

信息安全系统设计基础第一周学习总结

第一节 Linux系统 1:Linux系统      登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项(options)或参数(arguments).       即Linux中命令格式为:command[options][arguments].但有些命令也不需要跟着选项或参数.   选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同.   参数是指命令的作用对象.  2 :man命令       1是普通的Linux命令(用户命令帮助)      

20135304刘世鹏——信息安全系统设计基础第九周总结

第十章.系统I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 一.unix i/o 596 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出一个简单.低级的应用接口,这使得所有的输入输出都能以一种统一且一致的方式来执行: **1.打开文件:** - 内核返回一个小的非负整数,叫做描述符. -Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符 为0).标准输出(描述符为1).标准错误(描述符为2). 2.改变当前文件位置: