系统级IO:输入输出是主存与外部设备(磁盘,终端,网络)之间拷贝数据的过程

输入:从IO设备拷贝数据到主存中

输出:从主存中拷贝数据到IO设备中

10.1 unix IO

所有的IO设备都被模型化为文件,而所有的输入输出都被当做对相应的文件的读和写来执行。

打开文件:

(1)应用程序通过要求内核来打开相应的文件,内核返回一个非负整数(描述符),应用程序只需记住这个描述符,而相应信息

由内核来管理。

(2)unix外壳在打开一个进程时,都打开了三个文件:标准输入(描述符0),标准输出(描述符1),标准错误(描述符2)。

改变当前文件位置:

(1)对于每个打开的文件,内核保持着一个文件位置k,初始为0,这个位置是文件开头的起始字节偏移

(2)通过seek来设置k。

读文件操作:

(1)拷贝n个字节文件到存储器,从k开始,然后k增加到k+n。

(2)当文件大小为m时,而m<k,那么会触发一个EOF条件(即文件太少了,不够你读的字节数)。

写文件操作:

(1)从存储器拷贝n>0个字节到文件。从当前文件的k开始,然后更新k。

关闭文件:

(1)当应用完成对文件访问后,会通知内核关闭文件,而作为响应,内核会打开文件时创建的数据结构,并将这个

描述符恢复到可用的描述符池中。

(2)无论一个进程因何种原因终止时,内核都会关闭所有打开的文件,并释放它们在存储器中的资源。

10.2 打开和关闭文件

通过open打开一个已创建的文件或创建一个新文件。

open函数:

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

(1)filename:文件名。

(2)flags:如何访问这个文件。

(3)mode:新文件的访问权限。

若成功返回描述符。

close函数:

int close(int fd);

(1)fd为描述符

若成功则返回0,否则返回-1.

10.3 读和写文件

read和write函数来执行输入输出。

read函数:

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

(1)从描述符为fd的文件,拷贝最多n个字节的数据到存储器的buf

(2)若成功返回实际的字节数

(3)返回0表示遇到EOF

(4)返回-1表示遇到错误

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

(1)从存储器的buf拷贝最多n个字节的数据到fd文件的当前位置

深入理解计算机操作系统——第10章:UNIX IO,打开,关闭,读写文件的更多相关文章

  1. 深入理解计算机操作系统——第11章:全球IP英特网

    全球IP英特网 (1)每台英特网主机都运行实现TCPIP协议的软件. (2)英特网的客户端和服务器混合使用套接字接口函数和Unix IO函数来进行通信. (3)套接字函数典型的是作为陷入内核的系统调用 ...

  2. 深入理解计算机操作系统——第11章:CS模型,网络

    网络编程: 11.1 客户端-服务器编程模型 (1)一个应用是由一个服务器进程和一个或多个客户端进程组成. (2)服务器管理某种资源,并且操纵这种资源来为客户端服务. CS模型: CS的基本操作是事务 ...

  3. [WinAPI] API 10 [创建、打开、读写文件,获取文件大小]

    在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等.读写文件最为直接的方式 ...

  4. 深入理解计算机操作系统——12章:多进程,IO多路复用

    三种并行的应用程序: 1. 基于进程的并发编程: 2. 基于IO多路复用的并发: 3. 基于线程的并发编程: 12.1 基于进程的并发编程 进程的优劣: (1)进程间共享文件表,但不共享用户地址空间, ...

  5. 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理

    [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...

  6. 孙鑫视频学习:对第10章设置线宽时为什么不调用UpDateData(TRUE)的理解

    在第10章10.2.1小节中,首先分别对视图类和对话框类添加了一个名为m_nLineWidth的int型变量,再将用户在CSetting dlg对话框的edit控件中输入的线宽值记录在dlg.m_nL ...

  7. Linux就这个范儿 第10章 生死与共的兄弟

    Linux就这个范儿 第10章 生死与共的兄弟 就说Linux系统的开机.必须经过加载BIOS.读取MBR.Boot Loader.加载内核.启动init进程并确定运行等级.执行初始化脚本.启动内核模 ...

  8. Java核心技术卷一基础知识-第10章-部署应用程序和applet-读书笔记

    第10章 部署应用程序和applet 本章内容: * JAR文件 * Java Web Start * applet * 应用程序首选项存储 10.1 JAR文件 一个JAR文件既可以包含类文件,也可 ...

  9. UNIX环境高级编程 第1章 UNIX基础知识

    所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...

随机推荐

  1. UVM挑战及概述

    UVM的调度也具有其独特的挑战,尤其是在调试的领域.其中的一些挑战如下: 1. Phase的管理:objections and synchronization 2. 线程调试 3. Tracing i ...

  2. IOS之GCD记录

    在 GCD 中,加入了两个非常重要的概念: 任务 和 队列. 任务:即操作,你想要干什么,说白了就是一段代码,在 GCD 中就是一个 Block,所以添加任务十分方便.任务有两种执行方式: 同步执行 ...

  3. 2019年今日头条机试_JAVA后台岗_第二题

    使用map的递推,java对象做key需要重写equeal,hashCode方法,使拥有相同属性值的对象被识别为同一对象. import java.util.*; class Cat{ public ...

  4. 关于JDBC访问存储过程的问题

    最近开发一个应用,需要调用一个入参为List的存储过程. 存储过程为: proc_test(p1 OUT Number, p2 IN Number, p3 IN TAB_CUSTOMER); 这个Li ...

  5. python基础一day3 字符串

    对字符串进行的任何操作都是形成新的字符串. 切片顾头不顾尾 倒着取: 因为顾头不顾尾,所以4要取到 当步长省略时,可以同时省略最后一个冒号 写0时,取不到,什么都不写,可以取到 倒着取出全部的值,两种 ...

  6. OpenCV2:总结篇 工具方法函数

    一.简介 OpenCV提供了一些工具方法函数来辅助完成图像运算 二.时间相关 1.getTickCount()和getTickFrequency() double tTime; tTime = (do ...

  7. iOS 6 的 Smart App Banners 介绍和使用

    iOS 6 的 Smart App Banners 介绍和使用 Denis 留言: 10 浏览:4890 文章目录[隐藏] 什么是 Smart App Banners 在你的网站添加 Smart Ap ...

  8. vue计算属性computed和methods的区别

    computed和methods的区别 在new Vue的配置参数中的computed和methods都可以处理大量的逻辑代码,但是什么时候用哪个属性,要好好区分一下才能做到正确的运用vue. com ...

  9. 35个Redis面试题

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  10. 复制webp图片到word || 微信webp图片不能复制 || 如何复制webp到word

    用IE浏览器打开Alt+A 复制直接去word粘贴, 用IE浏览器打开Alt+A 复制直接去word粘贴 用IE浏览器打开Alt+A 复制直接去word粘贴 用IE浏览器打开Alt+A 复制直接去wo ...