第4章(1) 系统级IO教学设计.pptx

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第4讲输入输出与文件系统;教学目标;概述;本章主要内容;4.1、文件管理系统构架;2.文件操作库函数

;4.2系统I/O概念与文件操作编程;;UNIXI/O(系统级I/O)系统调用函数构成;4.2.2文件打开和关闭函数;二、参数flags和mode的说明;2.mode参数;;练习:根据应用场景,写出正确的open函数调用,若创建新文件,则新文件权限为rw-r--r--(umask=0002);4.2.3文件读写编程方法;二、read/write函数进一步说明

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

write(fd,buf,n):从缓冲区buf拷贝至多n个字节数据到文件fd的当前读写位置,并移动文件指针到写入内容之后,如果读写指针在文件中间,写入内容将覆盖原有内容。;三、示例;练习:程序阅读4.3

;四、文件读写性能;fcopy2.c:每次读写一1Kbytes,复制2MB文件

#includewrapper.h

intmain()

{charblock[1024];

intin,out;

intnread;

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);

}

$TIMEFORMAT=time./fcopy2

0.00user0.11system0:00.12elapsed90%CPU(0avgtext+0avgdata912maxresident)k

0inputs+40960outputs(0major+55minor)pagefaults0swaps

结论:执行I/O时,每次传递一个数据块,效率比较高

;练习:;4.2.4文件定位与文件内容随机读取;二、示例;4.2.5任意类型数据的文件读写;二、示例;用read/write函数读写结构体数组:;用fread/fwirte函数读写结构体数组:;;练习:;4.2.6用读写函数操作设备;4.3内核文件I/O数据结构及应用;实例1:分析程序输出;练习;二、文件共享原理(示例);4.3.2文件打开过程

;4.3.3内核文件I/O数据结构共享;(3)父进程打开两个文件后,创建了子进程;4.3.4dup和I/O重定向;1.示例:分析内核打开文件数据结构变化及程序运行结果;(1)内核打开文件数据结构变化;;二、用dup实现I/O重定向;练习;*4.4用RIO包(在libwrapper.a库中)健壮地读写;4.4.1、RIO的无缓冲的输入输出函数(仅看readn函数);4.4.2、RIO的带缓冲的输入函数;2.函数说明

#includewrapper.h

voidrio_readinitb(rio_t*rp,intfd);

功能:将描述符fd与缓冲区rp绑定,并初始化rp

ssize_trio_readlineb(rio_t*rp,void*usrbuf,size_tmaxlen);

功能:每次读一个文本行,返回读出字节数

ssize_trio_readnb(rio_t*rp,void*usrbuf;size_tn);

功能:每次读一个数据块(二进制数据),返回读出的字节数

RIO包缓冲区结构:

typedefstruct{

intrio_fd;/*descriptorforthisinternalbuf*/

intrio_cnt;/*unreadbytesininternalbuf*/

char*rio_bufptr;/*nextunreadbyteininternalbuf*/

charrio_buf[RIO_BUFSIZE];/*internalbuffer*/

}rio_t;

;3.读文本行程序示例;4.RIO主要函数分析;(2)readlineb函数;(3)rio_readnb;4.4.3

文档评论(0)

执着仅一次 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档