zoukankan      html  css  js  c++  java
  • 深入理解计算机操作系统——第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文件的当前位置

  • 相关阅读:
    Javascript中 this的精要总结
    优秀布局的链接
    前端测试框架(学习之路)前言
    SQL之Linq学习篇(目录)
    WebApi 研习之路 (目录)
    关于带参数模糊查询的方法 like --转载自 寂寞沙洲(博客园)
    .Net 程序在自定义位置查找托管/非托管 dll 的几种方法
    .net 生成非托管代码
    GridControl单元格编辑验证的方法
    扩展方法实现DevExpress控件校验
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/4776144.html
Copyright © 2011-2022 走看看