嵌入式开发学习(第三阶段第四天 Linux系统开发)
第四天:linux系统开发
目录操作
什么是目录?
在linux操作系统中其实目录也是一种文件,相对于普通文件,它的存储内容不同,它的存储内容主要是当前目录下的文件以及子目录文件信息。 目录就像是一颗大树,从根
目录就像是一颗大树,从根处分开很多分支,Linux 系统中所有文件都存在根目录下,根目录以 “/” 表示。而关于目录的操作主要有打开,遍历和关闭等。
目录的操作
什么是目录
目录在Linux系统中可被视为一个特殊的文件,与一般文件相比目录的存储内容不是数据而是文件或者子目录及其信息。
主要操作(目录遍历)
操作流程
打开目录,获取目录指针
函数名opendir
函数头文件#include <sys/types.h>
include<dirent.h>
函数原型:DIR * opendir(const char * name);
函数功能:打开 name 指定的目录
函数参数:1.name:要操作的目录名;2. DIR * 详细内容请查看相关数据结构体 说明部分
函数返回值:成功:返回DIR* 目录流
错误:返回NULL,并将错误码存放于errno 里
读取目录内容
readdir
函数头文件#include <sys/types.h>
include<dirent.h>
函数原型 struct dirent * readdir(DIR * dir);
函数功能 遍历文件目录
函数参数 dir:要操作的目录流指针;
struct dirent * 详见相关数据结构体说明部分
函数返回值成功:用于描述一个目录项信息的指针,隐藏的位置指针会指向下一个目录项错误发生或读取到目录尾则返回NULL并将错误码存入 errno 中
关闭目录,释放目录指针
函数名closedir
函数头文件#include <sys/types.h>
include<dirent.h>
函数原型: int closedir(DIR *dir);
函数功能: 关闭参数dir所指的目录流
函数参数: dir:要操作的目录流指针;
函数返回值:成功,返回0
失败返回-1,并将错误码放入 errno
目录创建
函数头文件#include <sys/stat>
#include<sya/types>
函数原型 int mkdir(const char * pathname,mode_t mode);
函数功能 目录创建
函数参数 pathname:要创建的目录名;
mode:目录的操作权限:
函数返回值 成功:返回0
出错:返回 -1,并将错误码存入 errno 中
删除空目录
函数头文件#include <unistd.h>
函数原型 int rmdir(const char * dirname);
函数功能 删除一个空目录
函数参数 dirname:要操作的目录名;
函数返回值 成功:返回0
出错:返回 -1,并将错误码存入 errno 中
删除目录
函数头文件#include <stdio.h>
函数原型 int remove(const char * pathname);
函数功能 删除一个空目录,当pathname为一个文件则调用unlink来删除,如果是一个目录,则调用rmdir 来删除。
函数参数 pathname:要操作的文件或者目录名;
函数返回值 成功:返回0
出错:返回 -1,并将错误码存入 errno 中
目录的更名(mv)
函数头文件#include <stdio.h>
函数原型 int rename(const char * oldpath, const char * newpath);
函数功能 重命名一个文件或者目录,如果oldpath 和 newpath 所指向的路径不是同一级目录,就移动文件
函数参数 oldpath:要更名的文件或者目录名;
newpath:更名后的文件或者目录名
**注意:**如果oldpath指定的是一个目录,在newpath所指向的目录要么不存在,要么是个空目录
函数返回值 成功:返回0
出错:返回 -1,并将错误码存入 errno 中
相关数据结构体说明
struct __dirstream
{void *__fd; /* `struct hurd_fd' pointer for descriptor. */char *__data; /* Directory block. */int __entry_data; /* Entry number `__data' corresponds to. */char *__ptr; /* Current pointer into the block. */int __entry_ptr; /* Entry number `__ptr' corresponds to. */size_t __allocation; /* Space allocated for the block. */size_t __size; /* Total valid data in the block. */__libc_lock_define (, __lock) /* Mutex lock for this structure. */
};
typedef struct __dirstream DIR;