目标:编写一个命令tree,读取某一目录下所有目录或者文件,把他们的信息保存到链表当中,打印出来,再把链表倒置再输出一遍。
#include <stdio.h>//标准输入输出
#include <stdlib.h>//C标准函数库
#include <unistd.h>//Unix类系统定义符号常量
#include <fcntl.h>//定义了很多宏和open,fcntl函数原型
#include <dirent.h>//读取文件夹内容所需的头文件
#include <string.h>
typedef struct LNode{
char data[10];
struct LNode *next;
}LNode,*LinkList;
LinkList L,L_r;
int main(int argc,char *argv[])
{
DIR *dirptr=NULL;//指向文件夹的指针
struct dirent *entry;
//相当于一个迭代器,读取文件夹里面的内容(包含文件夹或文件名字等信息)
if(argc!=2)
{//输入参数不正确
fprintf(stderr, "source file\n");
exit(1);
}
if((dirptr = opendir(argv[1]))==NULL)
{//读取文件夹失败
fprintf(stderr, "opendir file\n");
exit(1);
}
else
{
LinkList q, p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
L_r = (LinkList)malloc(sizeof(LNode));
L_r->next = NULL;
p = L;
while(entry=readdir(dirptr))
{//循环读取dirptr锁指向文件夹的文件夹或文件
//尾插法创建单链表
if(strcmp(entry->d_name,".")==0)
continue;
if(strcmp(entry->d_name,"..")==0)
continue;
q = (LinkList)malloc(sizeof(LNode));
q->next = NULL;
strcpy(q->data, entry->d_name);
p->next = q;//插入链表
p = p->next;
}
closedir(dirptr);
printf("Forward output:\n");
p = L->next;
while (p)
{//循环读取链表,输出,并且以头插法创建单链表L_r
printf("%s\n", p->data);
q = (LinkList)malloc(sizeof(LNode));
q->next = L_r->next;
strcpy(q->data, p->data);
L_r->next=q;
p = p->next;
}
printf("Reverse output:\n");
p = L_r->next;
while (p)
{//倒序输出
printf("%s\n", p->data);
p = p->next;
}
}
return 0;
}