第一次写博客,想把自己一点一滴的学习过程记录下来,也当作自己的笔记吧。有疏忽错误欢迎批评指正噢!
ls -l的流程图
文件类型
文件访问权限
目录操作-获取当前工作路径
•常用函数:getcwd,get_current_dir_name
•头文件:unistd.h
•函数定义:
•char *getcwd(char *buf, size_t size)
•将当前的工作目录绝对路径字符串复制到参数buf 所指的缓冲区,参数size 为缓冲区大小
•若参数buf 为NULL,参数size 为0,则函数根据路径字符串的长度自动分配缓冲区,并将分配的路径字符串缓冲区指针作为函数返回值(该内存区需要手动释放)
•失败返回NULL
•char *get_current_dir_name(void)
•成功返回路径字符串缓冲区指针(该内存区需要手动释放),失败返回NULL
目录操作-打开关闭目录
•常用函数:opendir,closedir
•头文件:dirent.h
•函数定义:
•DIR * opendir(const char * name);
•打开参数name指定的目录,并使一个目录流与它关联
•目录流类似于C库函数中的文件流
•失败返回NULL
•int closedir(DIR*dir);
•关闭指定目录流,释放相关数据结构
•成功返回0;失败返回-1
目录操作-读取目录文件
•常用函数:readdir
•头文件:sys/types.h;dirent.h
•函数定义:
•struct dirent * readdir(DIR* dir);
•读取目录流标识的目录文件
•目录文件是一系列目录项的列表,每执行一次readdir,该函数返回指向当前读取目录项的指针
如果到达目录结尾或者有错误发生则返回NULL目录操作-读取目录文件
•重要数据结构
struct dirent
{
ino_t d_ino; i节点号
off_t d_off; 在目录文件中的偏移
usigned short d_reclen; 文件名长度
unsigned char d_type; 文件类型
char d_name[256];文件名
};
文件属性管理-读取文件属性
常用函数:stat,lstat,fstat
•头文件: sys/stat.h
•函数定义:
•int stat(const char *path, struct stat *buf);
•int lstat(const char *path, struct stat *buf);
•两个函数参数相同,功能类似
•读取path参数所指定文件的文件属性并将其填充到buf参数所指向的结构体中
•对于符号链接文件,lstat返回符号链接的文件属性,stat返回符号链接引用文件的文件属性
•int fstat(int filedes, struct stat *buf);
•与前两个函数功能类似,指定文件的方式改为通过文件描述符
文件属性管理-文件属性解析
重要数据结构
struct stat {
mode_t st_mode; 文件类型与访问权限
ino_t st_ino; i节点号
dev_t st_dev; 文件使用的设备号
dev_t st_rdev; 设备文件的设备号
nlink_t st_nlink; 文件的硬链接数
uid_t st_uid; 文件所有者用户ID
gid_t st_gid; 文件所有者组ID
off_t st_size; 文件大小(以字节为单位)
time_t st_atime; 最后一次访问该文件的时间
time_t st_mtime; 最后一次修改该文件的时间
time_t st_ctime; 最后一次改变该文件状态的时间
blksize_t st_blksize; 包含该文件的磁盘块的大小
blkcnt_t st_blocks; 该文件所占的磁盘块 数
};
重要数据结构
mode_t st_mode;
无符号整数,其低16位定义如下
判定文件类型常用宏
•UNIX或Linux系统中的常见文件类型有:
•普通文件: S_ISREG()
•目录文件 S_ISDIR()
•字符特殊文件 S_ISCHR()
•块特殊文件 S_ISBLK()
•FIFO文件 S_ISFIFO()
•套接口文件 S_ISSOCK()
•符号连接 S_ISLINK()
以下是实现代码: