在计算机中,输入/输出(I/O,Input/Output)是指计算机接收和发送数据的过程,也可以表达为计算机输入和输出的过程。
它是计算机与外部(键盘、鼠标、传感器、显示器、打印机、扬声器等)交流的基础。
输入 (Input) – 指的是数据从外部源(例如键盘、鼠标、传感器、网络或其他设备)传入计算机系统的过程。
输出 (Output) – 指的是数据从计算机传递到外部设备(例如显示器、打印机、扬声器、网络或存储设备)的过程。
「一切皆文件」理念
Linux的设计哲学是「一切皆文件」。这意味着所有的I/O设备,都被视为「文件」。因此,所有的输入和输出操作都可以看作是对文件的读和写。
一切皆文件的设计思想让 Linux 内核为应用程序提供了一个简化、统一的接口,称为 Unix I/O。这使得所有的 I/O 操作都可以通过统一的方式进行。
普通文件:包含任意数据。虽然应用程序可能区分文本文件和二进制文件,但对内核而言,它们是相同的。
目录:它是一系列文件链接的集合,每个链接都将一个文件名与一个文件关联起来,一个文件可能是另一个目录。
所有文件都被组织在一个目录结构中,由一个名为“/”的根目录确定。实际上,系统中的每个文件都是根目录的直接或间接后代。
打开与关闭:进程使用 open 函数打开或创建文件,而 close 函数则用于关闭文件。读写操作:应用程序调用 read 和 write 函数来执行I/O操作。读取目录:应用程序可以使用 readdir 系列函数来读取目录内容,例如 opendir 函数。C 语言提供了一个高级 I/O 函数集合,称为「标准I/O库」。此库提供了一系列功能,如文件的打开与关闭、字节的读写,以及复杂的格式化功能。这些高级 I/O 操作将文件视为一个「流」,从程序员的角度看,一个流就是一个指向 FILE 类型的结构的指针。需要注意的是,标准 I/O 库是基于 Unix I/O 函数构建的。Unix I/O 模型在操作系统内核中实现,而标准 I/O 库提供了一个更高级的接口来访问这些底层功能。总结
输入/输出(I/O)是计算机与外部设备交互的核心过程,允许数据的接收和发送。
在Linux系统中,这种交互遵循“一切皆文件”的哲学,将所有设备和接口都视为文件。不仅简化了系统与设备的交互,而且为文件的操作(如打开、关闭、读和写)提供了统一的接口。
而 C 语言的标准 I/O 库进一步对这些底层操作进行了封装,为程序员提供了一个更加简洁和高效的方式来处理文件和数据流,实际上它是建立在 Unix I/O 基础之上,为开发者提供了与文件交互的高级工具。
题图生成:Pixabay
内容优化:ChatGPT
内容来源:《深入理解计算机系统》
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34543.html