ls code

来源:百度文库 编辑:神马文学网 时间:2024/04/28 08:49:04
#include
#include
#include
#include
#include
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;
}