分享

ls code

 panos_liu 2007-01-11
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char *argv[])
{
        DIR *dp;
        struct dirent *dirp;
        char path[MAXNAMLEN + 1];
        struct stat sb;
        char mode[10];

        const char *time_fmt = "%Y-%m-%d %H:%M:%S";
        char fdate[20];

        if (argc == 1)
        {
                strcpy(path, ".");
        }
        else if (argc == 2)
        {
                strcpy(path, argv[1]);
        }
        else
        {
                printf("cannot ls too few directories.\n");
                return 0;
        }

        if ((dp = opendir(path)) == NULL)
        {
                printf("cannot open this directories.\n");
                return 0;
        }

        while ((dirp = readdir(dp)) != NULL)
        {
                stat(dirp->d_name, &sb);
                mode[9] = (sb.st_mode & S_IFDIR) ? ‘d‘ : ‘-‘;
                if (sb.st_mode & S_IFIFO)
                        mode[9] = ‘i‘;
                else if (sb.st_mode & S_IFCHR)
                        mode[9] = ‘c‘;
                else if (sb.st_mode & S_IFDIR)
                        mode[9] = ‘d‘;
                else if (sb.st_mode & S_IFBLK)
                        mode[9] = ‘b‘;
                else if (sb.st_mode & S_IFREG)
                        mode[9] = ‘-‘;
                else if (sb.st_mode & S_IFLNK)
                        mode[9] = ‘l‘;
                else if (sb.st_mode & S_IFSOCK)
                        mode[9] = ‘s‘;
                else if (sb.st_mode & S_IFWHT)
                        mode[9] = ‘w‘;
                else if (sb.st_mode & S_ISUID)
                        mode[9] = ‘u‘;
                else if (sb.st_mode & S_ISGID)
                        mode[9] = ‘g‘;
                else
                        mode[9] = ‘ ‘;

                strftime(fdate, sizeof(fdate), time_fmt, localtime(&(sb.st_ctime)));
                printf("%crwxr--r-- %5d %5d %8d", mode[9],sb.st_uid, sb.st_gid, sb.st_size);
                printf("  %20s  %-16s\n", fdate, dirp->d_name);
        }

        closedir(dp);

        return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多