23,121
社区成员
发帖
与我相关
我的任务
分享
static int listfile_long(const char *path, int flags)
{
struct stat s;
char date[32];
char mode[16];
char user[16];
char group[16];
const char *name;
/* name is anything after the final '/', or the whole path if none*/
name = strrchr(path, '/');
if(name == 0) {
name = path;
} else {
name++;
}
if(lstat(path, &s) < 0) {
return -1;
}
mode2str(s.st_mode, mode);
user2str(s.st_uid, user);
group2str(s.st_gid, group);
// 看到这个了,如此处理的……
strftime(date, 32, "%Y-%m-%d %H:%M", localtime((const time_t*)&s.st_mtime));
date[31] = 0;
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
// MMMMMMMM UUUUUUUU GGGGGGGGG XXXXXXXX YYYY-MM-DD HH:MM NAME (->LINK)
switch(s.st_mode & S_IFMT) {
case S_IFBLK:
case S_IFCHR:
printf("%s %-8s %-8s %3d, %3d %s %s\n",
mode, user, group,
(int) MAJOR(s.st_rdev), (int) MINOR(s.st_rdev),
date, name);
break;
case S_IFREG:
printf("%s %-8s %-8s %16llu %s %s\n",
mode, user, group, s.st_size, date, name);
break;
case S_IFLNK: {
char linkto[256];
int len;
len = readlink(path, linkto, 256);
if(len < 0) return -1;
if(len > 255) {
linkto[252] = '.';
linkto[253] = '.';
linkto[254] = '.';
linkto[255] = 0;
} else {
linkto[len] = 0;
}
printf("%s %-8s %-8s %s %s -> %s\n",
mode, user, group, date, name, linkto);
break;
}
default:
printf("%s %-8s %-8s %s %s\n",
mode, user, group, date, name);
}
return 0;
}