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中的文件属性。

相关推荐
時肆4855 小时前
C语言造轮子大赛:从零构建核心组件
c语言·开发语言
张太行_6 小时前
Linux静态库:多模块高效管理
linux·运维·服务器
公子烨6 小时前
linux的斩杀线之OOM操控
linux
wgl6665207 小时前
Linux---基础IO!
linux·运维·服务器
xingzhemengyou17 小时前
C语言 查找一个字符在字符串中第i次出现的位置
c语言·算法
Ancelin安心7 小时前
kali-dirsearch的使用
linux·运维·服务器·python·计算机网络·web安全·网络安全
IT利刃出鞘8 小时前
VMware--解决vmdk越来越大的问题(vmdk瘦身)
linux·ubuntu·vmware
wdfk_prog8 小时前
[Linux]学习笔记系列 -- [driver]base
linux·笔记·学习
月光下的麦克8 小时前
如何查案动态库版本
linux·运维·c++
Vallelonga8 小时前
使用 busybox 制作磁盘镜像文件
linux·经验分享