Linux C接口编程入门之文件I/O

一切皆文件

"Linux一切皆文件"是Linux操作系统中的一个重要理念和设计原则。在Linux系统中,几乎所有的设备、资源都以文件的形式进行访问和操作。简化了操作系统的设计和管理,提供了一种统一的抽象模型,使得应用程序可以使用相同的方法和工具来处理各种文件和资源。

在Linux中,不仅普通文件(如文本文件、图像文件等)被视为文件,还有其他类型的实体也被当作文件对待,例如:

设备文件:Linux将硬件设备抽象为文件,可以通过设备文件进行访问和操作。例如,ELF1开发板的uart7接口可以通过/dev/ttymxc6表示,通过读写设备文件,可以进行与硬件设备的交互。

目录:目录也被视为文件,用于组织和存储其他文件和目录。通过目录文件,可以进行文件的查找、创建、删除和移动等操作。

管道(Pipe)和套接字(Socket):Linux提供了管道和套接字机制,用于不同进程之间的通信。管道和套接字也被视为文件,并通过文件描述符进行访问。

虚拟文件系统(Virtual File System):虚拟文件系统是Linux内核提供的一种抽象层,用于统一访问各种文件系统。不同类型的文件系统(如ext4、yaffs等)在虚拟文件系统中被统一处理,使得对文件的操作具有一致的接口和语义。

文件描述符

文件描述符(File Descriptor)通常是一个小的非负整数,是内核为了高效管理已被打开的文件所创建的索引,所有打开文件都由文件描述符引用。

操作系统中的每个进程都有一个独立的文件描述符表,其中存储了当前进程打开的所有文件的描述符。文件描述符可以在C语言中使用系统库函数(如open、read、write等)来操作,也可以在shell脚本中使用,以便进行文件重定向和管道操作。当打开或创建文件时,内核向进程返回一个文件描述符;当读写文件时,用打开或创建时返回的文件描述符标识该文件,作为参数传送给read或write函数。

文件描述符是一个数组,索引即为文件描述符的值,从0开始,通常系统保留了前3个文件描述符,0、1、2文件描述符分别对应标准输入(stdin)、标准输出(stdout)和标准错误(stderr),其他文件描述符则由操作系统动态分配。而数组的每个元素则是一个指向struct file结构体的指针,通过结构体中的操作函数获取inode中的文件属性。

相关推荐
zml_20151 小时前
docker 1分钟 快速搭建 redis 哨兵集群
linux·redis·docker·docker-compose
半梦半醒*2 小时前
playbook剧本
linux·运维·服务器·ssh·ansible·运维开发
Ronin3053 小时前
【Linux系统】线程控制
linux·线程·线程控制
宇龙神5 小时前
Linux中的IP命令详解
linux
仰泳之鹅5 小时前
【C语言】深入理解指针(2)
c语言·开发语言
草莓熊Lotso5 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day15
c语言·开发语言·经验分享·强化
007php0075 小时前
Go 语言常用命令使用与总结
java·linux·服务器·前端·数据库·docker·容器
ZCollapsar.6 小时前
数据结构 02(线性:顺序表)
c语言·数据结构·学习·算法
Awkwardx6 小时前
Linux系统编程—进程概念
linux·运维·服务器
BIBI20496 小时前
CentOS 7 的生命周期结束(EOL)导致 yum 无法下载软件包的问题解决
linux·运维·centos