目录操作函数:
DIR*opendir(char *name);
int closedir(DIR *dp);
struct dirent *readdir(DIR *dp);
struct dirent
{
inode
char dname[256];
}
递归遍历目录:ls-R.c
1.判断命令行参数,获取用户要查询的目录。 argv[1]
argc==-1 ---> ./
2.判断用户指定目录的是否目录。 stat S_ISDIR(); --> 封装函数 isFile
3.读目录:
opendir (dir)
while (readdir()){
普通文件,直接打印
目录:
拼接目录访问绝对路径。 sprintf(path,%s%s,dir,d_name)
递归调用自己。--》opendir(path) readdir closedir
}
closedir(dir)
while(readdir()){
普通文件,直接打印
目录:
拼接目录访问绝对路径。sprintf(path,"%s/%s",dir,d_name)
递归调用自己。 --》opendir(path)readdir closedir
}
closedir()
dup和dup2:
int dup(int oldfd);
oldfd:已有文件描述符
返回:新文件描述
fcntl函数实现dup:
int fcntl(int fd,int cmd,....)
cmd:F_DUPFD
参3:被占用的,返回最小可用的。
未被占用的,返回=该值的文件描述。