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

相关推荐
Huangjin007_10 小时前
【Linux 系统篇(二十一)】进程(九):进程等待 wait/waitpid、status状态参数
linux·运维·服务器
剑指offer.10 小时前
嵌入式硬件-ARM芯片的启动
c语言·嵌入式硬件·嵌入式
螺蛳粉 螺蛳粉10 小时前
mysql的备份与恢复
linux·运维·数据库·mysql
ao-weilai10 小时前
Linux网络编程:Socket UDP
linux·服务器·网络·c++
爱吃香菜的初学者11 小时前
九.Linux——文件操作
linux
园长的牧歌11 小时前
Ubuntu 打开应用在导航栏没有图标是个齿轮
linux·ubuntu
曦夜日长11 小时前
Linux系统篇,进程概念(四):内核链表的深度理解、进程优先级的底层理解
linux·运维·服务器·php
‎ദ്ദിᵔ.˛.ᵔ₎11 小时前
Linux 库制作与原理
linux
Logic10111 小时前
C语言/数据结构动态规划题解:Kadane算法求最大子数组和——O(n)时间O(1)空间
c语言·数据结构·动态规划·贪心·时间复杂度·算法题·最大子数组和
liulilittle11 小时前
Linux AI 开发环境搭建实录
linux·ai·llm·agent·hyper-v·dev·opencode