使用linux-c编程实现简单的ls命令
来源:互联网 发布:颜值评分软件 编辑:程序博客网 时间:2024/05/16 10:24
使用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<argc){ 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,表示成功执行。
*/
- 使用linux-c编程实现简单的ls命令
- linux编程:ls命令的简单实现
- Linux&C编程之Linux系统命令“ls -l”的简单实现
- Linux下ls命令的简单实现
- Linux命令简单实现 -- ls
- Linux系统编程_1_目录读取(实现简单ls命令)
- linux c实现ls命令
- 使用linux c 实现linux控制台 ls 命令
- ls命令的简单实现
- ls命令的简单实现
- ls命令的简单实现
- Linux下的 ls 命令的简单实现
- Linux命令实现(3) 简单的ls
- Linux(Fedora)下ls命令的简单实现
- Linux下ls命令的简单模拟实现
- Linux编程——ls命令的实现
- C语言实现Linux下的ls命令。
- C语言实现的linux下ls命令
- 检查内存泄露
- 微信公众号支付(服务商模式)
- 见字如面,T3420为专业而生
- php 字符串
- 音乐会的等待【单调栈】
- 使用linux-c编程实现简单的ls命令
- redis数据库简介与安装
- mybatis中${}和#{}的区别?
- BFS最短路路径
- 自己写Ibatis,理解batis
- Android 风向玫瑰图绘制
- 常见样式设计及DOM操作整理
- IDManager
- (Factory Method)工厂方法模式的Java实现