Linux应用软件编程:目录IO与framebuffer

一、目录IO

opendir

DIR *opendir(const char *name);

功能:打开目录文件并获得目录流指针

参数:

name:目录名

返回值:

成功:目录流指针

失败:NULL

closedir

int closedir(DIR *dirp);

功能:关闭目录文件

参数:

dirp:目录流指针

返回值:

成功: 0

失败:-1

readdir

struct dirent *readdir(DIR *dirp);

功能:从目录流中读取数据

参数:

dirp:目录流指针

返回值:

成功:struct dirent 指针,代表读到的文件信息

失败:NULL

文件末尾:NULL

struct dirent {

ino_t d_ino; /* Inode number */

off_t d_off; /* Not an offset; see below */

unsigned short d_reclen; /* Length of this record */

unsigned char d_type; /* Type of file; not supported

by all filesystem types */

char d_name256; /* Null-terminated filename */

};

命令

mkdir:创建文件夹

touch:创建普通文件

open();

fopen();

mkdir();

int mkdir(const char *pathname, mode_t mode);

功能:创建一个目录文件(文件夹)

参数:

pathname:目录名称

mode:目录文件的操作权限

返回值:

成功:0

失败:-1

目录遍历:

cpp 复制代码
int main(void)
{
	DIR *pdir = opendir("/dev");
	if (NULL == pdir)
	{
		printf("opendir error\n");
		return -1;
	}
	
	while (1)
	{
		struct dirent *pinfo = readdir(pdir);
		if (NULL == pinfo)
		{
			break;
		}
		if ('.' == pinfo->d_name[0])
		{
			continue;
		}
		printf(" %s : %ld\n", pinfo->d_name, pinfo->d_ino);
	}

	closedir(pdir);
	return 0;
}

二、framebuffer

  1. 什么是framebuffer

    帧缓存、帧缓冲技术。

    是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,通过该设备文件可以实现应用层向显存空间的数据写入,从而实现像素点的绘制。

  2. 如何操作framebuffer

    通过内存映射技术,可以实现显存空间和用户空间的内存映射,通过向用户空间写入RGB颜色值,从而实现显存数据的写入。

    1. 打开显示设备文件/dev/fb0

    2. 获取显示设备相关参数:分辨率、像素点的位数(位深度)

    3. 建立内存映射

    4. 写入RGB颜色值

    5. 解除内存映射

    6. 关闭显示设备文件

cpp 复制代码
void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
功能:建立文件和用户空间的内存映射
参数:
	addr:要映射的用户空间首地址
		  NULL :让内核选取空间,并将空间首地址返回
	length : 要映射的空间大小
	prot:对映射空间的读写执行权限
			PROT_READ | PROT_WRITE
	flags:MAP_SHARED (共享映射区域)
	fd:要映射的文件 
	offset:映射的偏移量
返回值:
	成功:映射到的用户空间首地址
	失败:MAP_FAILED((void *)-1)
相关推荐
?abc!15 分钟前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
隔窗听雨眠38 分钟前
PostgreSQL单表从Windows迁移到Linux:差异剖析、方案对比与全流程实战
linux·windows·postgresql
xinruoqianqiu42 分钟前
记录Linux
linux
额额额对了43 分钟前
嵌入式 Linux 实战:i.MX6ULL 上的 CAN 通信与摄像头采集
linux·运维·服务器
牛马鸡niumasi1 小时前
【Linux】进程替换
linux
RFID科技的魅力2 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
灯澜忆梦2 小时前
【Linux】#10 | Linux 终端实用快捷键 + 安装应用
linux·运维·服务器
码士集团小青2 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
小郎君6583 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧3 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法