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)
相关推荐
名字还没想好☜1 小时前
Go 用 slices/maps 标准库泛型函数:告别手写 Contains、Sort、去重(Go 1.21)
开发语言·后端·算法·golang·go
地平线开发者1 小时前
【模型轻量化专题】深度学习模型为什么需要轻量化
算法
词却1 小时前
Linux基础:常用基本命令与软件包管理
linux
_Narcissus_1 小时前
链表算法题和静态链表
数据结构·c++·笔记·算法·链表·ai·力扣
Lyyaoo.1 小时前
【普通数组】【中等】除了自身以外数组的乘积
数据结构·算法·leetcode
Dachui_11222 小时前
企业内网大模型公网访问方案:Ollama + OpenWebUI + ZeroNews 实战部署记录
运维·服务器·安全·远程工作·内网穿透
threerocks2 小时前
《The AI-Native SDLC Playbook》万字拆解
算法·aigc·ai编程
2401_890603402 小时前
Linux 进程控制
linux·运维·服务器
夏玉林的学习之路2 小时前
算法8.环形队列
算法