linux ls命令c,使用Linux C编程实现简单的ls命令

使用Linux C编程实现简单的ls命令具体代码如下:

加载的头文件有stdio.h,sys/types.h,dirent.h,unistd.h,sys/stat.h,fcntl.h,string.h等。

void main(int argc,char **argv){

DIR *dir;

struct dirent *rdir;

struct stat statbuf;

char * buffer=”/”;

char *file_; char *p;

int lenght=strlen(argv[argc-1]);

int len=argc;

char parameter[]={‘i’,’t’,’a’,’u’,’g’,’b’,’s’}; //参数属组

if(argc==1 ||strstr(argv[argc-1],buffer)==NULL){

argv[argc++]=”./”;

dir=opendir(“./”); //打开目录文件

}else{

dir=opendir(argv[argc-1]);

file_=argv[argc-1]; //打开目录文件

}

while((rdir=readdir(dir))!=NULL){ //读取目录中的目录或者文件

if(len!=argc){

file_=rdir->d_name; //从struct dirent结构取出文件名称

}else{

p=rindex(file_,’/’);

if(strlen(p)!=1){

strcat(file_,buffer);

}

strcat(file_,rdir->d_name);

}

int file=open(file_,O_RDONLY,0); //打开文件

stat(file_,&statbuf); //通过stat函数读取文件的状态信息放在struct stat 这个结构体中,这个结构包含文件的属组,属主,权限,时间戳,文件大小等。

int tmp=1;

while(tmp

if(rindex(argv[tmp],parameter[0])!=NULL){

printf("%10d",rdir->d_ino);

}

if(rindex(argv[tmp],parameter[1])!=NULL){

printf("%10d",statbuf.st_atime);

}

if(rindex(argv[tmp],parameter[2])!=NULL){

printf("%10d",rdir->d_ino);

printf("%20d",statbuf.st_atime);

printf("%10d",statbuf.st_uid);

printf("%10d",statbuf.st_gid);

printf("%10d",statbuf.st_blocks);

printf("%10d",statbuf.st_size);

}

if(rindex(argv[tmp],parameter[3])!=NULL){

printf("%10d",statbuf.st_uid);

}

if(rindex(argv[tmp],parameter[4])!=NULL){

printf("%10d",statbuf.st_gid);

}

if(rindex(argv[tmp],parameter[5])!=NULL){

printf("%10d",statbuf.st_blocks);

}

if(rindex(argv[tmp],parameter[6])!=NULL){

printf("%10d",statbuf.st_size);

}

tmp++;

}

close(file);      //关闭打开的文件

if(len!=argc){

int j=strlen(file_);

while(j>=lenght){

file_[j--]=NULL;

}

}

printf("%20s\n",rdir->d_name);

}

closedir(dir);    //关闭打开的目录

}

/*

struct stat {

mode_t st_mode; //文件对应的模式,文件,目录等

ino_t st_ino; //inode节点号

dev_t st_dev; //设备号码

dev_t st_rdev; //特殊设备号码

nlink_t st_nlink; //文件的连接数

uid_t st_uid; //文件所有者

gid_t st_gid; //文件所有者对应的组

off_t st_size; //普通文件,对应的文件字节数

time_t st_atime; //文件最后被访问的时间

time_t st_mtime; //文件内容最后被修改的时间

time_t st_ctime; //文件状态改变时间

blksize_t st_blksize; //文件内容对应的块大小

blkcnt_t st_blocks; //伟建内容对应的块数量

};

struct drient {

long d_ino;  索引节点号

off_t d_off;  在目录文件中的偏移

unsigned short d_reclen; 文件名长

unsigned char d_type; 文件类型

char d_name [NAME_MAX+1];  文件名,最长255字符

}

int stat(const char *path, struct stat *struct_stat);

int lstat(const char *path,struct stat *struct_stat);

还有一个fstat函数。

两个函数的第一个参数都是文件的路径,第二个参数是struct stat的指针。返回值为0,表示成功执行。

*/

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值