深入理解计算机操作系统——第10章:UNIX IO,打开,关闭,读写文件
系统级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,打开,关闭,读写文件的更多相关文章
- 深入理解计算机操作系统——第11章:全球IP英特网
全球IP英特网 (1)每台英特网主机都运行实现TCPIP协议的软件. (2)英特网的客户端和服务器混合使用套接字接口函数和Unix IO函数来进行通信. (3)套接字函数典型的是作为陷入内核的系统调用 ...
- 深入理解计算机操作系统——第11章:CS模型,网络
网络编程: 11.1 客户端-服务器编程模型 (1)一个应用是由一个服务器进程和一个或多个客户端进程组成. (2)服务器管理某种资源,并且操纵这种资源来为客户端服务. CS模型: CS的基本操作是事务 ...
- [WinAPI] API 10 [创建、打开、读写文件,获取文件大小]
在Windows系统中,创建和打开文件都是使用API函数CreateFile,CreateFile通过指定不同的参数来表示是新建一个文件,打开已经存在的文件,还是重新建立文件等.读写文件最为直接的方式 ...
- 深入理解计算机操作系统——12章:多进程,IO多路复用
三种并行的应用程序: 1. 基于进程的并发编程: 2. 基于IO多路复用的并发: 3. 基于线程的并发编程: 12.1 基于进程的并发编程 进程的优劣: (1)进程间共享文件表,但不共享用户地址空间, ...
- 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理
[翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...
- 孙鑫视频学习:对第10章设置线宽时为什么不调用UpDateData(TRUE)的理解
在第10章10.2.1小节中,首先分别对视图类和对话框类添加了一个名为m_nLineWidth的int型变量,再将用户在CSetting dlg对话框的edit控件中输入的线宽值记录在dlg.m_nL ...
- Linux就这个范儿 第10章 生死与共的兄弟
Linux就这个范儿 第10章 生死与共的兄弟 就说Linux系统的开机.必须经过加载BIOS.读取MBR.Boot Loader.加载内核.启动init进程并确定运行等级.执行初始化脚本.启动内核模 ...
- Java核心技术卷一基础知识-第10章-部署应用程序和applet-读书笔记
第10章 部署应用程序和applet 本章内容: * JAR文件 * Java Web Start * applet * 应用程序首选项存储 10.1 JAR文件 一个JAR文件既可以包含类文件,也可 ...
- UNIX环境高级编程 第1章 UNIX基础知识
所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...
随机推荐
- 如何正确理解关键字"with"与上下文管理器
转自:https://foofish.net/with-and-context-manager.html 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 “with” 关键字的语句,它通 ...
- 项目中常用git命令操作指令(一般正常的话够用不够再看相关git命令)
配置git1.首先在本地创建ssh key:ssh-keygen -t rsa -C "github上注册的邮箱" //(一路回车)2.进入c:/Users/xxxx_000/.s ...
- iOS开发内购全套图文教程
2015年最全的内购图文教程,首先是填各种资料,最后是代码,废话不多说,直接上图 ======================第一部分协议=============== 第一步 第二步 第三步 第四步 ...
- SQLite-Like语句
SQLite – LIKE子句 使用SQLite LIKE运算符 用于匹配文本.如果搜索表达式可以匹配模式表达式,如操作符将返回true,这是1.有两个通配符与Like操作符一起使用: The per ...
- Python3基础教程(二十)—— flask介绍
基本概念 什么是Flask? Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序.这个 web 应用程序可以是一些 web 页面.博客.w ...
- Model 模型
Model 模型模型是你的数据的唯一的.权威的信息源.它包含你所存储的数据的必要字段和行为.通常,每个模型对应数据库中唯一的一张表. 每个模型都是dhango.db.models.Model 的一个P ...
- upload 上传 加token 在 :headers='headers' 注意 不要直接写$refs.upload.headers = {} 这样vue会警告 修改组件内部变量
upload 上传 加token 在 :headers='headers' 注意 不要直接写$refs.upload.headers = {} 这样vue会警告 修改组件内部变量 <Upload ...
- nginx的编译安装
下载源码 wget http://nginx.org/download/nginx-1.15.9.tar.gz 安装开发包组 yum groupinstall "Development To ...
- android 近百个源码项目【转】
http://www.cnblogs.com/helloandroid/articles/2385358.html Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多 ...
- JetBrains系列产品激活
注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址: http://idea.codebeta.cn https://s.tuzhi ...