文件IO编程.ppt_第1页
文件IO编程.ppt_第2页
文件IO编程.ppt_第3页
文件IO编程.ppt_第4页
文件IO编程.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、教师: 廖小飞 2020/7/28,文件 I O 编程,主要内容,2,系统调用及API 文件及文件描述符 底层文件I/O操作 基本文件操作 文件锁 标准I/O编程,系统调用及API,3,内核 操作系统,控制硬件资源,提供程序运行环境 Shell 运行其它应用程序 提供接口 系统调用 内核接口,系统调用及API,4,系统调用 用户程序通过这组“特殊”接口来获得操作系统内核提供的服务,系统调用及API,5,应用编程接口API 通过软中断机制向内核提交请求,以获取内核服务的接口 遵循POSIX标准 主要通过C库实现 系统命令 可执行程序 内部引用应用编程接口(API)来实现相应的功能,系统调用及AP

2、I,6,syscall.c,主要内容,7,系统调用及API 文件及文件描述符 底层文件I/O操作 基本文件操作 文件锁 标准I/O编程,文件及文件描述符,8,Linux文件类型 普通文件、目录文件、链接文件、设备文件 文件权限 文件描述符 内核区分和引用特定的文件 索引值:非负的整数 指向在内核中每个进程打开文件的记录表,进程,文件状态标志 当前文件偏移量 i节点指针,文件表,文件及文件描述符,9,一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理 文件描述符为0、1和2 宏替换 STDIN_FILENO STDOUT_FILENO STDERR_FILENO,主要内容,10,

3、系统调用及API 文件及文件描述符 底层文件I/O操作 基本文件操作 文件锁 标准I/O编程,底层文件I/O操作,11,五个系统调用 open, read, write, lseek, close 不带缓存,直接进行读写操作 函数说明 open: 指定文件属性及用户权限 read: 从文件的当前指针位置开始 write: 写操作从文件的当前指针位置开始 lseek: 将文件指针定位到相应的位置,用在可定位(可随机访问)文件操作中 close: 进程终止时,内核自动关闭它打开的所有文件,底层文件I/O操作: open,12,打开或创建文件 flag 参数可以通过“|”组合 前3个互斥 perms

4、可以用宏定义,也可用 八进制,底层文件I/O操作: read/write,13,echo_screen.c,底层文件I/O操作: lseek/close,14,iocopy.c,主要内容,15,系统调用及API 文件及文件描述符 底层文件I/O操作 基本文件操作 文件锁 标准I/O编程,文件锁,16,多个用户共同使用操作同一个文件 上锁避免竞争 文件锁 建议性锁/强制性锁 两个系统调用 lockf() : 对文件施加建议性锁 fcntl() : 不仅可加建议性锁,还可施加强制锁 还能对文件的某一部分上锁,也就是记录锁 记录锁 读取锁(共享锁)/写入锁(排斥锁) 文件同一部分不能同时建立读取锁和

5、写入锁,底层文件I/O操作: fcntl,17,底层文件I/O操作: fcntl,18,加锁整个文件: l_start=0 l_whence=SEEK_SET l_len=0,struct flock short l_type; off_tl_start; shortl_whence; off_t l_len; pid_t l_pid; ,lockset.c,filelock_write.c,filelock_read.c,主要内容,19,系统调用及API 文件及文件描述符 底层文件I/O操作 基本文件操作 文件锁 标准I/O编程,标准I/O编程,20,应尽量减少系统调用的次数,提高效率 标准

6、I/O提供3种类型的缓冲存储 全缓冲阻塞I/O模型 填满标准I/O缓存后才进行实际I/O操作 行缓冲非阻塞模型 在输入和输出中遇到行结束符时,标准I/O库执行I/O操作 不带缓冲 相当于用系统调用write()函数将这些字符全写到被打开的文件上 stderr不带缓冲,标准I/O编程,21,基本操作 打开文件 fopen fdopen freopen,标准I/O编程,22,基本操作 关闭文件 fclose 将缓冲区内的数据全部写入到文件中 释放系统所提供的文件资源 定位文件 ftell fseek,标准I/O编程,23,基本操作 读文件 fread 写文件 fread,std_copy.c,标准I/O编程,24,其它操作 字符输入函数 字符输出函数 行输入函数 行输出函数 格式化输入函数 格式化输出函数,标准I/O编程,25,其它操作 字符输入函数 字符输出函数 getc/putc实现 为宏,fgetc / fputc不能实现 为宏 putchar(c)= putc(c,stdout),char_echo_screen.c,标准I/O编程,26,其它操作 行输入函数 行输出函数,line_echo_screen.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论