• 20165311 《信息安全系统设计基础》第六周学习总结


    一、UNIX I/O

        所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。

        这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行。

      • 打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息。
      • 改变当前的文件位置。
      • 读写文件
      • 关闭文件 应用完成了对文件的访问之后,就通知内核关闭这个文件,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。进程终止,内核也会关闭所有打开的文件并释放他们的存储器资源。

    二、打开和关闭文件

    三、读和写文件

    在系统I/O中读写文件用的系统函数为read()和write()函数来执行

    #include <unistd.h>
    
    ssize_t read(int fd,void * buf,size_t n);
    
    ssize_t write(int fd,void *buf,size_t n);

    read函数从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf。返回值-1表示一个错误,而返回值0表示EOF。否则,返回值表示的是实际传送的字节数量。而write函数从存储器位置buf拷贝至多n个字节到描述符fd的当前文件位置。返回值要么为-1要么为写入的字节数目。

    四、用RIO包健壮地读写

    RIO提供了方便、健壮和高效的I/O。提供了两类不同的函数:

      • 无缓冲的输入输出函数 直接在存储器和文件之间传送数据,没有应用级缓冲,它们对将二进制数据读写到网络和从网络读写二进制数据尤其有用。
      • 带缓冲的输入函数
    ssize_t rio_readn(int fd,void *usrbuf,size_t n);
    
    ssize_t rio_writen(int fd,void *usrbuf,size_t n);
  • 相关阅读:
    DDK 的一些笔记
    C# 32位程序访问64位系统注册表
    自己对设备栈的理解
    简单驱动编写与windbg调试
    DDK 的一些笔记other
    USB设备的一些概念
    C# 32位程序与64位程序读\写注册表的区别
    dbca建库时找不到ASM磁盘
    sf01_什么是数据结构
    cPickle.dump函数
  • 原文地址:https://www.cnblogs.com/fakerli/p/9905817.html
Copyright © 2020-2023  润新知