| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 系统级I/O -> 正文阅读 |
|
[系统运维]系统级I/O |
输入输出是在主存和外部设备之间复制数据的过程。输入操作时从I/O设备复制数据到主存,而输出操作是从主存复制数据到I/O设备。 Unix I/O一个Linux文件就是一个m字节的序列:B0,B1....Bm - 1; 所有的I/O设备都被模型化为文件,而所有的输入和输出都被当作对相应文件的读和写来执行。这种设备优雅地映射为文件的方式(甚至内核也被映射为文件),允许Linux内核引出一个简单、低级的应用接口,使得所有输入和输出都能以一种统一且一致的方式来执行:
文件文件类型:
目录层次结构绝对路径以'/'开始,标识从根节点开始的路径; 相对路径名以文件名开始,标识从当前工作目录开始的路径; 打开文件?打开文件时通知内核准备访问文件,通过调用open函数来打开一个已存在的文件或者创建一个新文件。 open函数将filename转换为一个文件描述符,并且返回描述符数字,返回的描述符总是在进程中当前没有打开的最小描述符。fd == -1发生错误。 关闭文件关闭文件通知内核结束访问一个文件,关闭一个已关闭的描述符会出错。 读文件读文件从当前文件位置复制字节到内存位置,然后更新文件位置,调用read函数执行输入。 read函数从描述符为fd的当前文件位置复制最多n个字节到内存位置buf,返回值-1代表错误,而返回值0代表EOF,否则返回值表示的是实际传送的字节数量。 写文件写文件从内存复制字节到当前文件位置,然后更新文件位置,调用write函数执行输出。 write函数从内存位置buf复制至多n个字节到描述符fd的当前位置。返回<0的数值代表发生错误。 一直允许不足值,反复处理不足值即可。 RIO包RIO提供两种不同的函数:
读取文件元数据应用程序调用stat和fstat函数,检索到文件的信息。 共享文件内核用三个相关的数据结构来表示打开的文件:
?两个不同的描述符通过两个不同的打开文件表表项来共享同一个磁盘文件。 子进程继承父进程的打开文件,共享相同的文件位置。调用fork之后,子进程的表与父进程的表相同,每一个refcnt+1. ? I/O重定向unix调用dup2(oldfd, newfd)函数来实现I/O重定向,dup2函数复制描述符表项oldfd到描述符表表项newfd,覆盖描述符表表项newfd以前的内容。如果newfd已经打开了,dup2会在复制oldfd之前关闭newfd。 调用之前: ?调用之后: ? 标准I/O标准I/O函数示例:
标准I/O库将一个打开的文件模型化为流:对文件描述符和流缓冲区的抽象。 每个C程序在开始时都有三个打开的流:
标准I/O的优点:
标准I/O的缺点:
Unix I/O优点:
Unix I/O缺点:
I/O函数的选择:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 3:23:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |