Linux编程 第4章 输入输出与文件系统

合集下载

现代操作系统(中文第三版)习题答案精编版

现代操作系统(中文第三版)习题答案精编版
6、在建立一个操作系统时有几个设计目的,例如资源利用、及时性、健壮性等。 请列举两个可能互相矛盾的设计目的。 答:考虑公平和实时。公平要求每一个进程都以公平的方式分配资源,没有进程 能得到超过公平份额的资源。另一方面,实时要求使进程在规定的时间内执行完 毕的基础上分配资源。一个实时的进程可能会得到一个不成比例的资源份额。(非
5002.395ns
11、一位校对人员注意到在一部将要出版的操作系统教科书手稿中有一个多次出 现的拼写错误。这本书大致有 700 页。每页 50 行,一行 80 个字符。若把文稿用 电子扫描,那么,主副本进入图 1-9 中的每个存储系统的层次要花费多少时间? 对于内存储方式,考虑所给定的存取时间是每次一个字符,对于磁盘设备,假定 存取时间是每次一个 1024 字符的盘块,而对于磁带,假设给定开始时间后的存 取时间和磁盘存取时间相同。
第2页
cztqwan 2017-06-19
答:原稿包含 80*50*700 = 2800000 字符。当然,这不可能放入任何目前的 CPU 中,但是如果可能的话,在寄存器中只需 2.8ms,在 Cache 中需要 5.6ms,在内 存中需要 28ms,整本书大约有 2700 个 1024 字节的数据块,因此从磁盘扫描大 约为 27 秒,从磁带扫描则需 2 分钟 7 秒。当然,这些时间仅为读取数据的时间。 处理和重写数据将增加时间。
cztqwan 2017-06-19
现代操作系统(第三版)习题答案
cztqwan 2017-06-19
(部分内容来源于网络,转载请注明出处)
cztqwan 2017-06-19
目录
第一章 绪论..................................................................................................................1 第二章 进程与线程......................................................................................................8 第三章 存储管理........................................................................................................21 第四章 文件系统........................................................................................................32 第五章 输入/输出 ......................................................................................................42 第六章 死锁................................................................................................................55 第七章 多媒体操作系统............................................................................................ 65 第八章 多处理机系统................................................................................................ 76 第九章 安全................................................................................................................88 第十章 实例研究 1:Linux .....................................................................................100 第十一章 实例研究 2:Windows Vista .................................................................. 110 第十二章 实例研究 3:Symbian 操作系统 ........................................................... 110 第十三章 操作系统设计.......................................................................................... 110

Linux系统编程考试资料

Linux系统编程考试资料

Linux系统程序设计第1章 Linux操作系统基础1.1 Unix/Linux操作系统简介1.2 相关术语1.3 库函数与系统调用1.4 项目构思-远程访问虚拟机1.5 Linux常用命令1.6 项目设计、实施与运行1.1 Unix/Linux操作系统简介Unix概述1969年:Ken Thompson 汇编语言1973年:与Dennis Ritchie用C语言重写UNIX ⅢUNIX分为System V和 BSD两大主流1978年:加利福尼亚大学伯克利分校以UNIX第六版为基础改进成BSD系列UNIX1983年:System V版本1发布,第一个商业UNIX版本System V 版本4是较成功的,或称为SVR41992年,版权纠纷,伯克利分校删除原UNIX代码,重写内核,1994年诞生4.4BSD版本,成为现代BSD基本版本1.1 Unix/Linux操作系统简介Linux概述1987年:荷兰的Vrije大学的Andrew S. Tanenbaum开发MINIX,用于操作系统课程的教学。

1991年:Linus学习MINIX,并发布了Linux内核。

2003年:Linux2.6版本内核发布Linux版本的两种说法内核版本:Linux2.4.20,Linux2.6等r.x.y:r-主版本号,x-偶数稳定奇数开发,y-错误修补次数发行版本:RedHat Linux 9.0,SUSE 10,Ubuntu等厂家将Linux内核与外围实用程序和文档包装,提供安装界面和系统配置、管理工具等,形成的操作1.2 相关术语操作系统多用户系统用户和组进程文件硬链接和软链接文件类型文件描述符与索引节点1.3 库函数与系统调用系统调用操作系统提供给外部程序的接口。

库函数C语言库函数提供给C语言编程需要的功能,有的库函数需要调用系统调用接口。

Linux中有GNU的glibc,POSIX的线程函数库等。

从用户角度观察都以常见的C语言函数形式出现,调用方法一致。

Linux入门学习大全(超详细)

Linux入门学习大全(超详细)
第12章 第13章 第14章
域名系统
Apache FTP 防火墙
Linux操作系统
第1章 Linux入门及安装
1.1 Linux入门 1.2 红旗Linux的安装 1.3 LILO的配置和使用
习题
Linux操作系统
1.1 Linux 入 门
1.1.1 什么是Linux Linux是一套免费使用和自由传播的类 Unix操作系统, 它主要用于基于Intel x86系列CPU的计算机上。这个系 统是由全世界各地的成千上万的程序员设计和实现的, 其目的是建立不受任何商品化软件的版权制约且全世
语言,它允许用户编写由 Shell 命令组成的程序。 Shell
编程语言具有普通编程语言的很多特点,比如它也有 循环结构和分支控制结构等,用这种编程语言编写的
Shell 程序与其他应用程序具有同样的效果。有关 Shell
更详细的内容,我们将在第7章中讨论。
Linux操作系统
Linux提供了像Microsoft Windows那样的可视的命 令输入界面——X Window的图形用户界面(GUI)。它 提供了很多窗口管理器,其操作就像Windows一样, 有窗口、图标和菜单,所有的管理都通过鼠标控制。 现在比较流行的窗口管理器是KDE和GNOME。每个
Linux操作系统
还有一些执行字处理操作,检测一个文件中的格式,
输出一个格式化的文件。过滤器的输入可以是一个文 件,也可以是用户从键盘键入的数据,还可以是另一 个过滤器的输出。过滤器可以相互连接,因此,一个 过滤器的输出可能是另一个过滤器的输入。在有些情 况下,用户可以编写自己的过滤器程序。
Linux操作系统
用系统。此外,Linux操作系统还有许多被称为实用工 具的程序,辅助用户完成一些特定的任务。

linux编程课程设计

linux编程课程设计

linux编程课程设计一、课程目标知识目标:1. 理解Linux操作系统的基本原理和编程环境,掌握Linux下的基本命令和操作。

2. 学会使用至少一种Linux下的编程语言(如C、Python等),掌握其基本语法和应用。

3. 掌握Linux下的文件系统结构和编程接口,能够进行文件读写和目录操作。

技能目标:1. 能够在Linux环境下编写简单的程序,具备基本的编程能力。

2. 学会使用Linux下的文本编辑器和编译器,熟练进行程序调试和错误排查。

3. 能够运用所学知识解决实际问题,具备一定的编程项目实践能力。

情感态度价值观目标:1. 培养学生对Linux编程的兴趣和热情,激发自主学习动力。

2. 培养学生的团队协作精神,学会与他人共同解决问题,提高沟通与表达能力。

3. 引导学生认识到编程对于培养逻辑思维、创新能力和解决实际问题的重要性,树立正确的价值观。

分析课程性质、学生特点和教学要求:本课程为选修课,适用于对计算机编程有一定兴趣和基础的学生。

学生在学习过程中需要具备一定的自学能力和动手实践能力。

教学要求注重理论与实践相结合,强调学生动手操作和实际编程能力的培养。

二、教学内容1. Linux操作系统概述- 了解Linux的发展历程、特点和优势- 掌握Linux的发行版及使用场景2. Linux基本操作与命令- 学习文件系统结构、文件权限和管理- 掌握基本命令:文件操作、文本处理、系统管理等3. 编程环境搭建- 安装和使用Linux下的编程语言(如C、Python等)- 学习使用文本编辑器(如Vim、Emacs等)和编译器(如GCC、Python解释器等)4. 基本编程语法与技巧- 掌握C/Python等编程语言的基本语法- 学习程序结构、控制流程、数据类型等5. 文件读写与目录操作- 学习文件系统API的使用,实现文件的读写操作- 掌握目录操作,实现文件的组织与管理6. 程序调试与错误处理- 学会使用调试工具(如GDB等)- 掌握程序错误排查和修正方法7. 实践项目与案例- 分析实际案例,运用所学知识解决实际问题- 完成小组项目,培养团队协作能力和编程实践能力教学内容安排与进度:第1-2周:Linux操作系统概述、基本操作与命令第3-4周:编程环境搭建、基本编程语法与技巧第5-6周:文件读写与目录操作、程序调试与错误处理第7-8周:实践项目与案例、总结与展示教材章节关联:本课程教学内容与教材中关于Linux编程的相关章节紧密关联,涵盖基本概念、编程环境、语法技巧、文件操作等方面的内容。

linux操作系统教案

linux操作系统教案

Linux操作系统教案第一章:Linux操作系统概述1.1 Linux简介1.1.1 Linux的起源和发展1.1.2 Linux的特点和优势1.1.3 Linux的应用领域1.2 Linux发行版介绍1.2.1 Ubuntu1.2.2 CentOS1.2.3 Fedora1.3 Linux文件系统结构1.3.1 /bin、/usr、/etc等目录的作用1.3.2 文件权限和所有权1.3.3 文件系统类型第二章:Linux基本命令2.1 命令行操作概述2.1.1 命令行界面2.1.2 命令行输入和输出2.1.3 命令历史和快捷键2.2 文件操作命令2.2.1 pwd、cd命令2.2.2 ls、ll、tree命令2.2.3 touch、cp、mv命令2.2.4 rm、rmdir命令2.3 文本操作命令2.3.1 cat、more、less命令2.3.2 head、tl命令2.3.3 grep、awk命令2.3.4 sed命令2.4 权限和所有权操作命令2.4.1 chmod、chown命令2.4.2 chgrp命令2.5 系统管理命令2.5.1 ps、top命令2.5.2 kill、pkill命令2.5.3 df、du命令2.5.4 free、vmstat命令2.5.5 mount、umount命令第三章:Linux用户和组管理3.1 用户管理概述3.1.1 用户配置文件3.1.2 useradd、usermod、userdel命令3.1.3 用户密码管理3.2 组管理3.2.1 组配置文件3.2.2 groupadd、groupmod、groupdel命令3.2.3 用户所属组管理3.3 用户和组管理实践3.3.1 创建普通用户和组3.3.2 设置用户和组权限3.3.3 切换用户和组3.3.4 删除用户和组第四章:Linux文件权限和所有权4.1 文件权限概述4.1.1 权限的表示方法4.1.2 权限的分类4.2 修改文件权限4.2.1 chmod命令4.2.2 chown命令4.3 设置文件权限实践4.3.1 设置文件读、写、执行权限4.3.2 设置文件归属权4.3.3 修改文件权限示例第五章:Linux软件管理5.1 包管理概述5.1.1 RPM包管理器5.1.2 DEB包管理器5.2 使用RPM包管理器5.2.1 安装、升级和卸载软件5.2.2 查询软件包信息5.2.3 软件依赖关系解决5.3 使用DEB包管理器5.3.1 安装、升级和卸载软件5.3.2 查询软件包信息5.3.3 软件依赖关系解决5.4 软件源码安装5.4.1 软件源码5.4.2 编译和安装软件5.4.3 软件配置和管理第六章:Linux网络配置6.1 网络配置文件6.1.1 /etc/network/interfaces文件6.1.2 网络配置示例6.2 网络管理命令6.2.1 ifconfig、ip命令6.2.2 ping、traceroute命令6.2.3 netstat命令6.3 配置网关和域名解析6.3.1 route命令6.3.2 resolvconf命令6.4 网络服务管理6.4.1 syslog、send服务6.4.2 Apache、Nginx服务6.4.3 SSH服务第七章:Linux shell脚本编程7.1 shell脚本基础7.1.1 脚本语法和结构7.1.2 变量和参数7.1.3 常用shell内置命令7.2 条件语句和循环语句7.2.1 if、else、elif语句7.2.2 for、while、until循环7.3 常用脚本技巧7.3.1 函数定义和调用7.3.2 文件操作命令7.3.3 文本处理命令7.4 实战shell脚本示例7.4.1 自动备份文件脚本7.4.2 监控系统负载脚本7.4.3 定时任务脚本第八章:Linux系统安全8.1 系统安全概述8.1.1 安全策略和原则8.1.2 防火墙和SELinux 8.2 用户和权限安全8.2.1 用户认证方法8.2.2 文件权限和安全8.2.3 用户行为审计8.3 系统审计和日志管理8.3.1 auditd服务8.3.2 syslog服务8.3.3 日志分析与监控8.4 入侵检测和防御8.4.1 IDS/IPS系统8.4.2 安全漏洞扫描8.4.3 恶意代码防护第九章:Linux备份和恢复9.1 备份策略和工具9.1.1 备份类型和策略9.1.2 tar、cpio备份工具9.1.3 duplicity备份工具9.2 磁盘阵列和存储池9.2.1 RD技术概述9.2.2 mdadm命令9.2.3 LVM存储池9.3 系统恢复和急救盘9.3.1 系统恢复步骤9.3.2 急救盘制作和使用9.3.3 系统镜像和克隆第十章:Linux服务器配置与管理10.1 服务器配置概述10.1.1 服务器角色和类型10.1.2 配置文件和工具10.2 文件服务器配置10.2.1 NFS服务配置10.2.2 Samba服务配置10.3 打印服务器配置10.3.1 cupsd服务配置10.3.2 打印机共享设置10.4 数据库服务器配置10.4.1 MySQL、PostgreSQL配置10.4.2 数据库管理和维护10.5 网络服务器的配置与管理10.5.1 Apache、Nginx配置10.5.2 SSH、VPN服务配置10.5.3 邮件服务器配置重点解析本文教案涵盖了Linux操作系统的概述、基本命令、用户和组管理、文件权限和所有权、软件管理、网络配置、shell脚本编程、系统安全、备份和恢复以及服务器配置与管理等方面的知识点。

4-文件系统

4-文件系统

• 概念: • Size:文件的实际大小,也就是文件有多少个字节 • Blocks:文件占用磁盘的Block的个数,注意是磁盘的 : block,通常硬盘的block是512字节 • IO Blocks:文件系统的block大小,此例是4096,也就是 : 在这个文件系统中,8(block)=1(IO block),512*8=4096 • • 结果就是:这个文件大小是822420字节,需要822420 /4096=200.786个IOBlock,也就是201个IOblock,而三个 IOblock就是201×8=1608个磁盘的block,所以block的个 数是1608。该文件实际占用空间是:1608×512=823296 字节。
• SAS • (Serial Attached SCSI)即串行连接SCSI, 是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术 以获得更高的传输速度,并通过缩短连结 线改善内部空间等。SAS是并行SCSI接口 之后开发出的全新接口。此接口的设计是 为了改善存储系统的效能、可用性和扩充 性,并且提供与SATA硬盘的兼容性。
平均寻道时间
平均寻道时间是硬盘性能参数中非常重要的一个,受硬盘转速与记录密度的影响。在转速 都为7200rpm的情况下,硬盘的记录密度越高,平均寻道时间就越短——很简单,由于记 录密度的增加,磁头只需要移动更短的距离就可以实现定位。更短的平均寻道时间就意味 着硬盘在读写大量小文件时的性能更好,因为这个时候磁头是运动得最频繁的。
• 在下图的例子中,一个文件可以有多个名字。只要 在不同的目录项中填写“文件名-i节点号”的时候 将i节点号填写的相同就可以了。 linux FS 可以简单 分成 inode table与data area两部份。inode table上 有许多的inode, 每个inode分别记录一个档案的属性 与这个档案分布在哪些datablock

《操作系统》习题集参考答案:第4章 文件系统

《操作系统》习题集参考答案:第4章 文件系统

第4章文件系统-习题集参考答案一、选择题1. D2. A3. D4. A5. B6. A //一个文件对应一个文件控制块,所有文件控制块构成目录文件7. A //在文件系统中,为每个文件建立一个文件目录,作为目录文件的一个目录项,包含文件的名称及其属性。

8. C9. C //在设置当前工作目录后,文件查找在默认情况下是查当前目录,从而提高查找速度。

10. D11. C12. B13. C //如UNIX中,采用了把文件名与文件描述信息分开的方法,即使文件描述信息单独形成一个称为索引节点的数据结构,简称i节点(索引节点),这样文件目录中仅由文件名各指向该文件所对应的i节点的指针所构成,这样目录项仅有16个字节,其中14个字节为文件名,2个字节为i节点指针。

在1KB的盘块中可做1KB/16B=64个目录项,这样,为找到一个文件,可以大小减少读入内在的信息量。

14. B //只有索引分配方式中的FCB才包含索引表地址15. B16. B17. D //1K/64=1618. C //本注:每块能存放的目录项=1K/64=16个;3200个目录项占用盘块数=3200/16=200。

因为一级目录平均访问盘次数=1/2盘块数(顺序查找目录表中所有目录项,每个目录项为一个FCB),所以平均访问磁盘次数=200/2=100次。

19. C//本注:1.用的是称做“混合索引”的方式。

2.思路很简单,只是要用些专用概念3.三类地址项:1)直接地址项,每个地址直接管理一个“文件块”,而每个“块”是256字节。

共4个这种地址,所以管理:4*256=1KB2)一级间接地址项,每个地址项管理一个“索引块”,而索引块的大小也是256字节,其中可放置:256/4=64个地址项,而每个地址项管理256字节文件。

所以,2个一级间址可管理文件大小:2*64*256=32KB3)二级间接地址项,地址项→索引块→索引块→文件数据块。

所以可管理文件数据:1*64*64*256=1024KB.4.综合上面可管理的文件大小为:1+32+1024=1057KB20. B21. B22. B //每个盘面物理块=200*4=800块,盘面数=8000/800=10,互盘有两个盘面。

Linux操作系统应用编程课件(完整版)

Linux操作系统应用编程课件(完整版)

2.Linux操作系统的发行版
Linux操作系统发行版实际就是Linux内核加上外围实用程序 组成的一个大软件包。相对于Linux操作系统的内核版本,发行版 的版本号随发布者的不同而不同,与Linux操作系统内核的版本号 是相对独立的。因此把SUSE、RedHat、Ubuntu、Slackware等直 接称为Linux是不确切的,它们是Linux操作系统的发行版。更确 切地说,应该将它们称为“以Linux为核心的操作系统软件包”。
Shell是Linux操作系统的一种用户界面,它作为操作系统 的“外壳”,为用户提供使用操作系统的接口。Shell主要有以 下两大功能特点。
(1)Shell是一个命令解释器,它拥有自己内建的Shell命令集。 (2)Shell的另一个重要特性是它自身就是一种解释型的程序设 计语言。
当用户成功登录Linux系统后,系统将执行一个Shell程序。 正是Shell进程提供了命令提示符。作为默认值,Shell对普通用 户用“$”作提示符,对超级用户(root)用“#”作提示符。
1.4.4 联机手册
联机手册命令man可向用户提供系统中各种命令、系统调用、 库函数和重要系统文件的详细说明,包括名字、使用语法、功能 描述、应用实例和相关参考文件等。其格式如下:
$ man [拥有哪个级别的帮助。 -k:查看和命令相关的所有帮助。
查看who命令的详细说明示例如下。 $ man who
Linux操作系统 应用编程
本章主要介绍Linux文件系统,包括文件系统的结构、文 件的定义与分类、目录与文件操作命令、文件的权限管理等, 让读者对Linux文件系统有一定的认识和理解,为后文的学习 打下基础。
2.1.1 组织结构
Linux操作系统中所有文件存储在文件系统中,文件被组织 到一棵“目录树”中,其文件系统层次结构(树状目录结构)如 图2.1所示。树根在该层次结构的顶部,树根的下方衍生出子目 录分支。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

讨论: mode_t是什么类型?
二、参数flags和mode的说明
1. flgas:指明了进程打算如何访问这个文件,它必须包括以 下标志之一 它必须指明三种打开方式之一,各对应一个二进制位:
只读。文件应该存在,(bit 0) O_WRONLY: 只写,写入内容替换指针出数据(bit 1) O_RDWR: 可读可写(bit 2)
缓冲区地址 buf 主存 缓冲区长度为 n个字节 1101...01010110
缓冲区地址 buf 主存 缓冲区长度为 n个字节 1101...01010110
read(fd,buf,n)
文件内容 10110... 1101...01010110 ...11010
write(fd,buf,n)
文件内容 10110... 1101...01010110 ...11010
件”file.out”,若file.out原来有 数据,则覆盖之,原来不存在 ,则创建之 (1)某个编辑程序要打开一个C语 言程序p1.c进行编辑,p1.c不 存在则创建之
4.3 文件读写编程方法
4.4.1文件读写编程 一、函数声明及功能
#include <unistd.h> ssize_t read(int fd , void *buf , size_t n); 返回:若成功则为读出的字节数,若遇EOF 则为0. 若出错为-1. ssize_t write(int fd , const void *buf, size_t n); 返回:若成功则为写入的字节数,若出错则为-1
mode=S_IRUSR|S_IWUSR|S_IRGRP| S_IWGRP|S_IROTH|S_IWOTH = 0666 110 110 110 新文件权限为:
& 111 101 101 perm 110 100 100


即rw- rw- rw- 减去 --- -w- -w-,结果为rw-r--r-umask设置:umask -p 0002 练习4.1
表示文件所有者拥有执行权限。
表示同组用户拥有读权限。 表示同组用户拥有写权限。 表示同组用户拥有执行权限。 表示其他用户拥有读权限。 表示其他用户拥有写权限。 表示其他用户拥有执行权限。
(2)umask环境变量 是新建文件掩码,umask变量值中为1的位是不允许新创建文 件拥有的权限位。 新建文件的实际访问权限位被设置为mode &~umask 示例: umask=S_IWGRP|S_IWOTH= 0022
讨论: 为何使用类型size_t和ssize_t 返回值类型为ssize_t,而读写字节数参数n的类型为 size_t
二、read/write函数进一步说明 read(fd,buf,n):从描述符为fd的当前读写位置拷贝最多n个字 节数据到存储器位置buf,返回值-1表示一个错误,而返回值0 表示EOF,否则,返回值表示的是实际传送的字节数量。 write(fd,buf,n):从缓冲区buf拷贝至多n个字节数据到文件fd的 当前读写位置,并移动文件指针到写入内容之后,如果读写指 针在文件中间,写入内容将覆盖原有内容。

本章主要内容

什么是UNIX I/O(或系统级I/O) Linux如何给新建文件设置操作权限
使用系统级I/O函数进行输入输出的基本方法
Linux内核如何对打开文件实施管理 文件描述符复制dup和I/O重定向实现原理 RIO健壮I/O包及使用方法 如何读取文件元数据


内存映射原理与编程方法


write函数:向文件写入数据,并移动读写指针 close函数:关闭文件,回收内核打开文件结构内容,将未写入文件数据 flush到文件,将文件属性写回外存
4.2 文件打开和关闭函数
一、函数原型 #include <sys/types.h> #include<sys/stat.h> #include <fcntl.h> int fd=open(char* filename, int flags, mode_t mode); 返回: 若成功返回新文件描述符,若出错为-1 int close(int fd); 返回: 若成功则为>0. 若出错为-1.
第4章输入输出与文件系统
本章概述 本章的学习目标 主要内容
概述
文件系统是操作系统中负责存储和管理信息的模块,它 用统一的方式管理用户和系统信息的存储、检索、更新、共 享和保护,并为用户提供一整套方便有效的文件使用和操作 方法。对计算机类专业学生来说,学习文件系统基本工作原 理,掌握文件和I/O编程的基本方法,对未来开发出效率高、 可靠性好有很大帮助,是理解计算机系统工作原理的重要部 分,也是未来从事相关研究与应用优化的基础知识。本章主 要讲授文管理系统结构、系统级I/O、内核文件I/O数据结构、 文件组织、文件物理结构等。

Bm-1
四、UNIX I/O(系统级I/O)构成

open函数:打开文件。
应用程序调用open要求内核打开相应的文件,来宣告它想要访问一个I/O设备或
文件。 内核返回文件描述符,一个小的非负整数,以后操作用描述符来标识该文件,内 核记录有关这个打开文件的所有信息(文件属性、读写指针),应用程序只需记 住这个描述符 系统将自动打开键盘、正常输出窗口(屏幕)、错误输出窗口三个设备文件,返 回前三个文件描述符0、1、2,分别称为标准输入、标准输出、标准错误输出
学习目标
了解文件系统层次结构和文件I/O库之间关系、应用场合、 性能比较 掌握使用系统级I/O函数进行文件I/O、文件元数据读取的 基本编程方法,能根据应用需求进行I/O库选择 掌握内核文件I/O数据结构的用途与文件打开过程,理解文 件描述符含义、文件共享原理,以及I/O重定向原理 掌握文件组织和文件物理结构,能进行优劣对比分析,理 解提高文件搜索效率的基本方法
$ time ./fcopy1 real 0m9.27s user 0m0.98s sys 0m7.77s
fcopy2.c:每次读写一1K bytes,复制2MB文件
#include "wrapper.h" int main() { char block[1024];
int in , out; int nread; in = Open("file.in" , O_RDONLY,0); out = Open( "file.out", O_WRONLY|O_CREAT|O_TRUNC,0666 ); while ((nread =Read(in, block, sizeof(block))) >0) Write(out , block , nread) ; Close(in); Close(out); exit (0) ; }
执行read前文件 读写位置为pos
n个字节 执行read后文件读 写位置为pos+n
写入前文件读写 位置为pos
n个字节
写入后文件读写 位置为pos+n
三、示例
示例1. 输入文件infile的内容是:abcdefghijklmnopqrstuvwxyz。
程序testwrite1.c:
#include "wrapper.h" int main() { int fd; char buf[100]; fd=Open("infile",O_RDWR,0); Write (fd,"1234",4); Read (fd,buf,4); buf[4]=0; //给从文件读回的文本数据添加串结束符 printf("%s\n",buf); Close(fd); }
二、学习UNIX I/O的意义 学习UNIX I/O有助于理解其他系统概念,如管道、I/O重定 向、守护进程实现 I/O是系统操作不可或缺的组成部分,是理解上层I/O库工 作原理的基础 某些场景下进行I/O编程(如网络编程、管道、读取文件元 数据)必须使用UNIX I/O
三、UNIX文件和UNIX I/O概念 一个UNIX文件就是一个m个字节的序列:B0, B1 , …, Bk,…, 所有的I/O设备,如键盘、网络、磁盘和终端,都被模型化 为文件,可称为设备文件,所有的输入和输出都用对相应 文件的读和写来执行。 这种将设备优雅地映射为文件的方式,允许UNIX内核引出 一个简单、低级的应用接口,用于文件操作,称为UNIX I/O,又称系统I/O
练习:根据应用场景,写出正确的open函数调用,若 创建新文件,则新文件权限为rw-r--r--(umask=0002)
应用场景 (1) 某程序需要将操作日志写 入日志文件 ”1.log”, 若 1.log 不存 在则创建之,若存在则将日志信 息追加到已有信息之后 (1)某程序需将运行结果写入文 open函数调用
程序执行结果:?
练习:程序阅读4.2
四、文件读写性能
fcopy1.c:每次读写一个字节,复制2MB文件
#include "wrapper.h" int main() { char c; int in , out; in = Open("file.in" , O_RDONLY, 0); out = Open("file.out", O_WRONLY|O_CREAT|O_TRUNC,0666 ); while (Read(in,&c , 1) == 1) Write(out , &c , 1 ) ; Close(in); Close(out); exit (0) ; }
O_RDONLY:

写操作还可包含以下额外标志,与按位或与基本标志形成 flags参数:
如果文件不存在,就创建它的一个空文件 O_TRUNC: 如果文件已经存在,就截断它。 O_APPEND: 以添加方式打开文件,在每次写操作前,设置文件读 写指针到文件的结尾处
相关文档
最新文档