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

相关推荐
曦夜日长7 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
shimly1234568 小时前
给断网无 sudo ubuntu22.04 机器安装 nodejs
linux
别动我齐刘海9 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
Lsetea9 小时前
OpenSSL报certificate chain too long:error 22与verify_depth深度排查
linux·https·ssl证书·openssl·证书链
不像程序员的程序媛11 小时前
linux常见文本操作命令
linux·运维·服务器
wangbing112511 小时前
开发指南149-IotDB-常用命令
linux·运维·iotdb
看着博客敲代码11 小时前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
小HANN13 小时前
华为云企业网站上云实战|从零搭建高可用WordPress全站架构(ECS+RDS+ELB+弹性伸缩+云监控闭环)
linux·运维·服务器·经验分享
wuyk55513 小时前
嵌入式驱动开发:量产级工程化实战(第9篇)——低功耗下的通信可靠性
c语言·驱动开发·stm32·单片机·嵌入式硬件
星恒随风13 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式