?? lscommand.c
字號:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include<pwd.h>
#include<grp.h>
void do_ls(char* str);
void printstat(char *strname);
void showfileinfo(char* strname,struct stat *infop);
char* uidtoname(uid_t uid);
char* gidtoname(gid_t gid);
void modetostr(int mode,char* str);
int main(int argc,char*argv[])
{
if(argc==1)
{
do_ls(".");
}
else
while(--argc)
{
printf("%s:\n",*++argv);
do_ls(*argv);
}
return 0;
}
void do_ls(char* strname)
{
DIR *dir_ptr;
struct dirent *direntp;
if((dir_ptr=opendir(strname))==NULL)
{
fprintf(stderr,"can not open %s \n",strname);
}
else
{
while((direntp=readdir(dir_ptr))!=NULL)
{
printstat(direntp->d_name);
}
closedir(dir_ptr);
}
}
void printstat(char *strname)
{
struct stat info;
if(stat(strname,&info)==-1)
{
perror(strname);
}
else
showfileinfo(strname,&info);
}
void showfileinfo(char* strname,struct stat *infop)
{
char str[10];
memset(str,0,sizeof(str));
modetostr(infop->st_mode,str);
printf("%s",str);
printf("%4d",(int)infop->st_nlink);
printf("%-8s",uidtoname(infop->st_uid));
printf("%-8s",gidtoname(infop->st_gid));
printf("%8ld",(long)infop->st_size);
printf("%.12s",4+ctime(&infop->st_mtime));
printf("%s\n",strname);
}
char* uidtoname(uid_t uid)
{
struct passwd* getpwuid();
struct passwd* ptr;
static char numstr[10];
if((ptr=getpwuid(uid))==NULL)
{
sprintf(numstr,"%d",uid);
return numstr;
}
else
{
return ptr->pw_name;
}
}
char* gidtoname(gid_t gid)
{
struct group* getgrgid(),*grpptr;
static char numstr[10];
if((grpptr=getgrgid(gid))==NULL)
{
sprintf(numstr,"%d",gid);
return numstr;
}
else
{
return grpptr->gr_name;
}
}
void modetostr(int mode,char* str)
{
strcpy(str,"----------");
if(S_ISDIR(mode))
str[0] ='d';
if(S_ISCHR(mode))
str[0] ='c';
if(S_ISBLK(mode))
str[0] ='b';
if(mode & S_IRUSR)
str[1] ='r';
if(mode & S_IWUSR)
str[2] ='w';
if(mode & S_IXUSR)
str[3] ='x';
if(mode & S_IRGRP)
str[4] ='r';
if(mode & S_IWGRP)
str[5] ='w';
if(mode & S_IXGRP)
str[6] ='x';
if(mode & S_IROTH)
str[7] ='r';
if(mode & S_IWOTH)
str[8] ='w';
if(mode & S_IXOTH)
str[9] ='x';
//return str;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -