01文件IO

server/2025/3/1 13:17:37/

一、linux_C函数接口手册

在线手册

Linux 常用C函数(中文版)

linux一切皆文件

linux系统下一切都是以文件的形式存储在系统中的,通过linux系统提供的IO(input/output)接口开发板就可以往linux系统中

输入一些信息和获取一些信息。

linux系统的文件分类:

-  普通文件:存在于外部存储器中,用于存储普通数据。
d  目录文件:用于存放目录项,是文件系统管理的重要文件类型。
p  管道文件:一种用于进程间通信的特殊文件,也称为命名管道FIFO。
s  套接字文件:一种用于网络间通信的特殊文件。
l  链接文件:用于间接访问另外一个目标文件,相当于Windows快捷方式。
c  字符设备文件:字符设备在应用层的访问接口。
b  块设备文件:块设备在应用层的访问接口。

基于linux操作系统的开发框架

二、linux系统IO接口使用

man 2 open 查看open函数接口

1、open 打开文件

NAMEopen, openat, creat - open and possibly create a   file功能:   打开  和  或许     创建  一个 文件
SYNOPSIS#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);pathname: 打开的文件路径名 flags: O_RDONLY   只读O_WRONLY   只写O_RDWR     读写返回值: 成功  新的文件描述符   失败  -1 例子:打开一个普通文本文件  
int fd = open("./my.txt",O_RDWR);           
if(fd < 0)
{printf("打开文件失败\n");
}else 
{printf("打开文件成功\n");
}

open 附加参数

//以创建的方式打开文件int open(const char *pathname, int flags, mode_t mode);pathname:文件路径名  mode : 设置创建文件的权限  flags: 权限参数三选一O_RDONLY   只读O_WRONLY   只写O_RDWR     读写附加参数O_APPEND  追加模式    👉 int  fd = open("my.txt",O_RDWR|O_APPEND); 追加模式每次打开文件光标在末尾O_TRUNC   清空模式    👉 int  fd = open("my.txt",O_RDWR|O_TRUNC);  清空模式每次打开文件都清空所有内容O_CREAT   创建模式    👉 int  fd = open("my.txt",O_RDWR|O_CREAT,0777);  创建模式文件不存在则会创建文件,并设置rwxrwxrwx权限O_EXCL|O_CREAT   检查模式    👉 int  fd = open("my.txt",O_RDWR|O_EXCL|O_CREAT,0777); 检查模式,文件不存在则创建,文件存在则打开失败。

文件描述符队列

linux系统中用户每次打开一个文件,操作系统就会生成一个对应的描述符,后续用户想要操作该文件时,只需要操作这个描述符即可!

2、write 写入文件

man 2 write 查看写入接口

NAMEwrite - write to a file descriptor功能:    写入  一个 文件 描述符                   
SYNOPSIS#include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);fd:需要写入的文件描述符 buf:数据的缓存地址 count:数据的大小   返回值:成功  返回写入的字节数 失败   -1例子:写入数据到文件中 
write(fd,"hello",5);              char buf[1024] = {"hello"}; // 只赋值前面5个字符,后面都是 0
int size = write(fd, buf, sizeof(buf)); //sizeof(buf) 把hello 后面的0也写入文件中了 ❌
int size = write(fd, buf, strlen(buf)); // strlen(buf) 字符串有效长度 5      ✔️   注意:写入数据到文件中时,必须写入数据的真实大小。否则会写入乱码!     

3、read 读取文件

man 2 read 查看读取接口

NAMEread - read from a file descriptor功能   读取 从   一个 文件 描述符
SYNOPSIS#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);fd:需要读取的文件描述符  buf:读取后数据的存储地址 count:需要读取的数据大小 返回值:  大于 0  成功读取到的字节数 等于 0   文件读取完毕  ✔️一直读取一个文件,直到为0,则文件读取完毕! 小于 0   文件读取错误  例子:读取一个文件的内容到缓存中 
char  buf[1024]={0}; 
read(fd,buf,1024);    例子:读取一个文件的中的所有内容 
while(1)
{char  buf[1024]={0}; if(read(fd,buf,1024) == 0){break; }       
}                                  注意:在读取一个文件时,用户定义的缓存为多大,则读取多大。       1.如果文件的数据比缓存小,则会全部数据读取出来。 2.如果文件的数据比缓存大,则需要多次读取直到返回0             

4、lseek 文件光标

当用户操作一个文件描述符时,每次读写文件光标的位置都会发生偏移 ,用户可以使用lseek 修改文件光标的当前位置!

NAMElseek - reposition read/write file offset修改       读/写     文件   位置                 
SYNOPSIS#include <sys/types.h>#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);fd:需要修改的文件描述符 offset:偏移量      whence:参考位置 (参照物)SEEK_SET 文件头 SEEK_CUR 光标当前位置 SEEK_END 文件末尾 例子:把光标移动到文件头 
lseek(int fd,0,SEEK_SET); //从文件SEEK_SET(头)开始偏移0个位置。 
lseek(int fd,0,SEEK_END); //从文件SEEK_END(末尾)开始偏移0个位置。    

5、close 关闭文件描述符

NAMEclose - close a file descriptorSYNOPSIS#include <unistd.h>int close(int fd);fd:需要关闭的文件描述符 

 

系统IO访问设备文件

linux系统的设备文件与普通文件是一样的,都是以文件的形式存储到系统的磁盘中。所以用户只需要1.打开设备文件

2.写入或者读取设备文件 3.关闭设备文件即可访问设备文件。

访问LCD设备流程

1.打开LCD设备文件

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{// 1.打开LCD设备文件int lcd_fd = open("/dev/fb0", O_RDWR);if (lcd_fd < 0){printf("打开LCD设备失败\n");return -1;}else{printf("打开LCD设备成功\n");}
}

2.往设备文件写入内容

注意:1.如果文件类型是普通ASCII文件,就可以写入字符串!

2.如果文件类型是设备文件,就要写入设备需要数据!

当前操作的是LCD设备,LCD设备的作用是显示图像的,所以就应该往屏幕中写入一些图像数据!

// 0xFFFF00 黄色  -> intint color[800 * 480] = {0};for (int i = 0; i < 800 * 480; i++){color[i] = 0xFFFF00; // 把所有颜色点赋值为黄色}// 2.写入数据到LCD设备文件中write(lcd_fd, color, 800 * 480 * 4);

3、计算机表达图像的方式

图像组成的基本单位像素点

4、像素点的组成

所以想要LCD屏幕显示对应的图像,只有把对应图像的像素点,写入屏幕设备即可!

RGB颜色查询对照表|RGB颜色|三原色配色表

一个像素点由 R,G,B 组成,每个RGB的取值范围是
R:0 -> 255 , 一个字节  
G:0 -> 255 , 一个字节 
B:0 -> 255 , 一个字节   红色:0xFF0000
绿色:0x00FF00
蓝色:0x0000FF
天蓝:0x00FFFF
黄色:0xFFFF00

屏幕像素点与缓存的关系

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>int main()
{// 1.打开LCD设备文件int lcd_fd = open("/dev/fb0", O_RDWR);if (lcd_fd < 0){printf("打开LCD设备失败\n");return -1;}else{printf("打开LCD设备成功\n");}// 2.定义一个二维数组int color[480][800] = {0};// 分区域赋值for (int y = 0; y < 240; y++){for (int x = 0; x < 400; x++){color[y][x] = 0xff0000;}}for (int y = 0; y < 240; y++){for (int x = 400; x < 800; x++){color[y][x] = 0x00ff00;}}for (int y = 240; y < 480; y++){for (int x = 0; x < 400; x++){color[y][x] = 0x0000ff;}}for (int y = 240; y < 480; y++){for (int x = 400; x < 800; x++){color[y][x] = 0xff00ff;}}// 把缓存区写入到LCD屏幕中write(lcd_fd, color, sizeof(color));
}

至此,希望看完这篇文章的你有所收获,我是Bardb,译音八分贝,道友,下期见!


http://www.ppmy.cn/server/171556.html

相关文章

自动化问题汇总

PLC【1】伺服轴使用前 机器人【1】机器人使用前 上位机【1】 系统【1】Window的性能测试工具无法加载性能计数器 其他【1】 PLC 【1】伺服轴使用前 机器人 【1】机器人使用前 上位机 【1】 系统 【1】Window的性能测试工具无法加载性能计数器 使用.NET时&#xff0c;编…

git上传仓库操作

在 Visual Studio Code (VSCode) 中&#xff0c;手动将本地仓库与远程仓库关联起来是一个常见的需求。以下是详细的操作步骤和解释&#xff1a; 前提条件 已安装 Git&#xff1a;确保你的系统中已经安装了 Git&#xff0c;并且可以通过命令行运行 git 命令。已初始化本地仓库&…

PipeWire 简介

PipeWire 是一个底层的多媒体框架&#xff0c;旨在替代 PulseAudio 和 JACK 这些 Linux 平台更为传统的音频服务器&#xff0c;它聚焦于处理多媒体数据 (主要是音频、视频和 MIDI)&#xff0c;提供更灵活和高效的音频、视频处理能力。 PipeWire 项目的创始人及最核心贡献者是 …

【每日刷题】Day184

【每日刷题】Day184 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1700. 无法吃午餐的学生数量 - 力扣&#xff08;LeetCode&#xff09; 2. 146. LRU 缓存 - 力扣&a…

极简Redis速成学习

redis是什么&#xff1f; 是一种以键值对形式存储的数据库&#xff0c;特点是基于内存存储&#xff0c;读写快&#xff0c;性能高&#xff0c;常用于缓存、消息队列等应用情境 redis的五种数据类型是什么&#xff1f; 分别是String、Hash、List、Set和Zset&#xff08;操作命…

AF3 pair_sequences函数解读

AlphaFold3 msa_pairing模块的pair_sequences函数的核心目标是基于 MSA(多序列比对)中的物种信息,在多条链之间建立 MSA 配对索引,从而帮助 AlphaFold3 捕捉共进化信息,提升蛋白复合物预测的准确性。函数pair_sequences 通过调用 _make_msa_df、 _create_species_dict 以…

正大杯攻略|量表类问卷数据分析基本步骤

在量表类问卷研究领域&#xff0c;分析变量之间的影响关系是基础且常用的手段。一般先提出关于自变量 X 对因变量 Y 影响关系的假设&#xff0c;随后运用合适的统计方法进行验证&#xff0c;挖掘二者间规律&#xff0c;进而得出结论&#xff0c;为研究发展提供建议。具体分析步…

页面加载速度,如何优化提升?

页面加载速度&#xff0c;如何优化提升&#xff1f; 咱来好好唠唠页面加载速度这事儿&#xff0c;再说说怎么把它提上去。 页面加载速度是咋回事儿 页面加载速度啊&#xff0c;就好比你去餐厅吃饭&#xff0c;从你坐下点餐到饭菜端上桌的时间。在网页里&#xff0c;就是你在…