内容概要
1、掌握文件或目录属性信息的函数stat()函数的使用
2、掌握目录操作的函数opendir 函数和readdir函数的使用
3.编写程序mysearch.c递归实现打印输出任意目录下,指定类型的所有文件,如:./mysearch /home/temp *.c
1.编写程序3_1.c,实现显示任意指定目录下的文件属性信息
int main(int argc, char **argv)
{
if(argc != ########第1空##########)
{
exit(1);
}
struct stat buf;
bzero(#########第2空#######);
stat(######第3空########, &buf);
printf("file type: ");
switch(buf.st_mode &#########第4空######)
{
case S_IFSOCK:printf("s"); break;
case S_IFLNK: printf("l"); break;
case S_IFREG: printf("-"); break;
case S_IFDIR: printf("d"); break;
case ######第5空#######: printf("p"); break;
case S_IFBLK:
printf("b");
break;
case S_IFCHR:
printf("c");
break;
}
printf("\n");
if(S_ISBLK(buf.st_mode) || S_ISCHR(buf.st_mode))
{
printf("dev-no: %d, %d", major(buf.st_rdev), minor(buf.st_rdev));
//获取主设备号和次设备号
}
else
{
printf("size: %d", (int)buf.st_size);
}
printf("\n");
printf("link: %d\n", buf.st_nlink);
return 0;
}
2.建立3_2.c文件,使用opendir()函数和readdir()函数,实现显示任意目录下所有文件及目录名称。
#include <stdio.h>
#include <dirent.h> // DIR,struct dirent,opendir, readdir
int main(int argc, char *argv[])
{
printf("%d\n", getppid());
DIR *dp; // 指向目录
struct dirent *dirp; // 指向目录中的对象
if(argc != 2)
{
printf("error\n");
return 1;
}
// 打开一个目录
if((dp = opendir(argv[1])) == NULL)
{
printf("can`t open %s\n", argv[1]);
return 1;
}
// 读取目录中的对象, 然后打印出其名字d_name
while((dirp = readdir(dp)) != NULL)
{
printf("%s\n", dirp->d_name);
}
closedir(dp); // 关闭目录
return 0;
}
3. 编写程序mysearch.c递归实现打印输出任意目录下,指定类型的所有文件,如:./mysearch /home/temp *.c
ps:递归函数时遇到一个坑,搞了好久,因为一个 i-- 的问题导致core dump,这种原因基本都属于触发越界中断,要么是指针没有初始化,要么是栈溢出或者数组溢出。最后用 --i 才解决。
结果如图:
最后一个基于自己实现栈的就不做了,大同小异。