#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
bool ParseParameters(int argc,char * argv[]);
void ls1(char * dir);
int PrintStatInfo(int argc,char * argv[]);
void ShowStatInfo(char * fname,struct stat * buf);
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
bool ParseParameters(int argc,char * argv[]);
void ls1(char * dir);
int PrintStatInfo(int argc,char * argv[]);
void ShowStatInfo(char * fname,struct stat * buf);
void mode_to_letters(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';
{
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';
}
char * uid_to_name(uid_t uid)
{
static char numstr[10];
struct passwd * pw_ptr;
if((pw_ptr = getpwuid(uid)) == NULL)
{
sprintf(numstr,"%d",uid);
return numstr;
}
else return pw_ptr->pw_name;
}
{
static char numstr[10];
struct passwd * pw_ptr;
if((pw_ptr = getpwuid(uid)) == NULL)
{
sprintf(numstr,"%d",uid);
return numstr;
}
else return pw_ptr->pw_name;
}
char * gid_to_name(gid_t gid)
{
struct group * grp_ptr;
static char numstr[10];
if((grp_ptr = getgrgid(gid))==NULL)
{
sprintf(numstr,"%d",gid);
return numstr;
}
else
{
return grp_ptr->gr_name;
}
{
struct group * grp_ptr;
static char numstr[10];
if((grp_ptr = getgrgid(gid))==NULL)
{
sprintf(numstr,"%d",gid);
return numstr;
}
else
{
return grp_ptr->gr_name;
}
}
int main(int argc,char * argv[])
{
int main(int argc,char * argv[])
{
if( argc == 1)
{
ls1(".");
}
else
{
while(--argc)
{
printf("%s:/n",*++argv);
ls1(*argv);
}
}
return 0;
}
{
ls1(".");
}
else
{
while(--argc)
{
printf("%s:/n",*++argv);
ls1(*argv);
}
}
return 0;
}
bool ParseParameters(int argc,char * argv[])
{
for(int i=0; i<argc; i++)
{
printf("%s/n",argv[i]);
}
return false;
}
void ShowStatInfo(char * fname,struct stat * buf)
{
if( strcmp(fname,".") == 0 || strcmp(fname,"..")==0) return;
char modestr[11];
mode_to_letters(buf->st_mode,modestr);
printf("%s",modestr);
printf(" %4d ",(int)buf->st_nlink);
printf("%-8s ",uid_to_name(buf->st_uid));
printf("%-8s ",gid_to_name(buf->st_gid));
printf("%8ld ",(long)buf->st_size);
printf("%.12s",4+ctime(&buf->st_mtime));
printf(" %s/n",fname);
}
void dostat(char * filename)
{
struct stat info;
if(stat(filename,&info)!=-1)
{
ShowStatInfo(filename,&info);
}
else perror(filename);
}
void ls1(char * dir)
{
DIR * dir_ptr;
struct dirent *direntp;
if ((dir_ptr = opendir(dir))==NULL)
{
fprintf(stderr,"ls1: cannot open %s",dir);
}
else
{
while((direntp = readdir(dir_ptr))!=NULL)
{
//printf("%s/n",direntp->d_name);
dostat(direntp->d_name);
}
closedir(dir_ptr);
}
}