#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; } |
|