一、目录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
-
什么是framebuffer
帧缓存、帧缓冲技术。
是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,通过该设备文件可以实现应用层向显存空间的数据写入,从而实现像素点的绘制。
-
如何操作framebuffer
通过内存映射技术,可以实现显存空间和用户空间的内存映射,通过向用户空间写入RGB颜色值,从而实现显存数据的写入。
-
打开显示设备文件/dev/fb0
-
获取显示设备相关参数:分辨率、像素点的位数(位深度)
-
建立内存映射
-
写入RGB颜色值
-
解除内存映射
-
关闭显示设备文件
-
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)