关于tree命令的编写

 目标:编写一个命令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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值