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

相关推荐
浅念-20 分钟前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
爱吃生蚝的于勒32 分钟前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森44 分钟前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
翼龙云_cloud1 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~1 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
冉佳驹2 小时前
Linux ——— 静态库和动态库的设计与使用
linux·动态库·静态库·fpic
C++ 老炮儿的技术栈2 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
陌上花开缓缓归以2 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
wangjialelele2 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发