使用LinuxC编程实现简单的ls命令

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

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

void m     ai   n(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 pa     ram   e     te   r[]={‘i’,’t’,’a’,’u’,’g’,’b’,’s’}; //参数属组
if(argc==1 ||st     rs   tr(argv[argc-1],buffer)==NULL){
argv[arg     c++   ]=”./”;
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_a     ti   me);
}
if(rindex(argv[tmp],parameter[2])!=NULL){
printf("%10d",rdir->d_ino);
printf("%20d",statbuf.st_a  TI me);
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; //普通文件,对应的文件字节数
 TI me_t st_a  TI me; //文件最后被访问的时间
 TI me_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,表示成功执行。
*/



使用LinuxC编程实现简单的ls命令_设计制作_RF/无线
45
71
0
31

相关资讯

  1. 1、探冰机器人与水下滑翔机助力科学考察2714
  2. 2、BogerdMartin推出网络安全数据传输设备,不需要使用可移动媒体2845
  3. 3、《光之声》涉及校园枪支暴力娜塔莉·波特曼:这无时不在发生4538
  4. 4、最难的25个应聘面试问题2529
  5. 5、演的烂片最高分5.6,小哥哥凭啥逆袭《花木兰》真人版男一号?4012
  6. 6、成为《推理学院》大咖不再错过1个亿1626
  7. 7、中国电信与紫光集团签署战略合作协议,打造共享共赢的业务生态4292
  8. 8、​LED产品出口超210亿美元立达信、阳光、得邦居前三1175
  9. 9、​能斯特效应家族迎新成员!法国科学家证实国科大提出的谷能斯特效应4529
  10. 10、​5G场景和技术带来新安全威胁3937
全部评论(0)
我也有话说
0
收藏
点赞
顶部