#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <time.h>
#include <grp.h>
void mode(struct stat buf);
void usrm(struct stat buf);
void grpm(struct stat buf);
void othm(struct stat buf);
void name(struct stat buf);
int main(int argc, const char *argv[])
{
struct stat buf;
int i;
i = stat(argv[1],&buf);
if(i != 0)
{
perror("fail to stat\n");
exit(1);
}
mode(buf);
usrm(buf);
grpm(buf);
othm(buf);
printf(" %d ",buf.st_nlink);
name(buf);
printf("%ld ",buf.st_size);
printf("%.12s ",ctime(&buf.st_mtime)+4);
printf("%s\n",argv[1]);
return 0;
}
void mode(struct stat buf)
{
if(S_ISREG(buf.st_mode))
putchar('-');
else if(S_ISDIR(buf.st_mode))
putchar('d');
else if(S_ISCHR(buf.st_mode))
putchar('c');
else if(S_ISBLK(buf.st_mode))
putchar('b');
else if(S_ISFIFO(buf.st_mode))
putchar('p');
else if(S_ISLNK(buf.st_mode))
putchar('l');
else if(S_ISSOCK(buf.st_mode))
putchar('s');
}
void usrm(struct stat buf)
{
if(buf.st_mode & S_IRUSR)
putchar('r');
else
putchar('-');
if(buf.st_mode & S_IWUSR)
putchar('w');
else
putchar('-');
if(buf.st_mode & S_IXUSR)
putchar('x');
else
putchar('-');
}
void grpm(struct stat buf)
{
if(buf.st_mode & S_IRGRP)
putchar('r');
else
putchar('-');
if(buf.st_mode & S_IWGRP)
putchar('w');
else
putchar('-');
if(buf.st_mode & S_IXGRP)
putchar('x');
else
putchar('-');
}
void othm(struct stat buf)
{
if(buf.st_mode & S_IROTH)
putchar('r');
else
putchar('-');
if(buf.st_mode & S_IWOTH)
putchar('w');
else
putchar('-');
if(buf.st_mode & S_IXOTH)
putchar('x');
else
putchar('-');
}
void name(struct stat buf)
{
struct passwd *p;
struct group *g;
p = getpwuid(buf.st_uid);
g = getgrgid(buf.st_gid);
printf("%s %s ",p->pw_name,g->gr_name);
}
用stat 写出ls -l的全功能
最新推荐文章于 2023-01-31 20:08:32 发布