-i:inode号
-t:访问时间,修改时间
-p:权限
-f:指定文件
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>
#include<time.h>
#include<dirent.h>
#define MAX_SIZE 255
void quanxian(char *dest, struct stat buf);
int main(int argc, char *argv[]){
int i = 0;
int ch = 0;
//显示当前目录下的文件
DIR *dir;
struct dirent *dir_name;
//时间
struct stat buf;
struct tm *atime = (struct tm*)malloc(sizeof(struct tm));
struct tm *mtime = (struct tm*)malloc(sizeof(struct tm));
//权限
char dest[10];
for(i = 1; i < 10; i++){
dest[i] = '-';
}
//没有参数
if(argc == 1){
if((dir=opendir(".")) == NULL){
printf("opening dir error");
exit(0);
}
while((dir_name=readdir(dir)) != NULL){
printf("%s\n",dir_name->d_name);
}
closedir(dir);
}else if(argv[1][1] == 'f' || argv[1][2] == 'f' || argv[1][3] == 'f' || argv[1][4] == 'f'){
if(lstat(argv[2], &buf) < 0){
printf("lstat error\n");
}
while((ch=getopt(argc, argv,"f:tip")) != -1){
switch(ch){
case 'f':
printf("自定义文件夹\n");
break;
case 't':
atime = localtime(&buf.st_atime);
mtime = localtime(&buf.st_mtime);
printf("文件的访问时间: %d-%02d-%02d %02d:%02d\n",atime->tm_year+1900, atime->tm_mon+1, atime->tm_mday, atime->tm_hour, atime->tm_min);
printf("文件的修改时间:%d-%02d-%02d %02d:%02d\n",mtime->tm_year+1900, mtime->tm_mon+1, mtime->tm_mday, mtime->tm_hour, mtime->tm_min);
break;
case 'i':
printf("文件的inode号:%ld\n",buf.st_ino);
break;
case 'p'://加入目标文件路径
quanxian(dest,buf);
break;
}
}
}else{
while((ch=getopt(argc, argv, "f:tip")) != -1){
switch(ch){
case 't':
if((dir = opendir(".")) == NULL){
printf("opening dir error\n");
exit(0);
}
while((dir_name=readdir(dir)) != NULL){
if(lstat(dir_name->d_name,&buf) < 0){
printf("lstat dir error\n");
exit(0);
}
printf("%s\t\t\t",dir_name->d_name);
atime = localtime(&buf.st_atime);
mtime = localtime(&buf.st_mtime);
printf("文件的访问时间: %d-%02d-%02d %02d:%02d\tt",atime->tm_year+1900, atime->tm_mon+1, atime->tm_mday, atime->tm_hour, atime->tm_min);
printf("文件的修改时间:%d-%02d-%02d %02d:%02d\n",mtime->tm_year+1900, mtime->tm_mon+1, mtime->tm_mday, mtime->tm_hour, mtime->tm_min);
}
closedir(dir);
break;
case 'i':
if((dir = opendir(".")) == NULL){
printf("opening dir error\n");
exit(0);
}
while((dir_name=readdir(dir)) != NULL){
if(lstat(dir_name->d_name,&buf) < 0){
printf("lstat dir error\n");
exit(0);
}
printf("%s\t\t\t",dir_name->d_name);
printf("文件的inode号:%ld\n",buf.st_ino);
}
closedir(dir);
break;
case 'p':
if((dir = opendir(".")) == NULL){
printf("opening dir error\n");
exit(0);
}
while((dir_name=readdir(dir)) != NULL){
if(lstat(dir_name->d_name,&buf) < 0){
printf("lstat dir error\n");
exit(0);
}
printf("%s\t\t\t",dir_name->d_name);
quanxian(dest,buf);
}
closedir(dir);
break;
}
}
}
exit(0);
}
void quanxian(char *dest, struct stat buf){
int i = 0;
//开启超级无敌九轮if神功
if(S_IRUSR & buf.st_mode){
dest[1] = 'r';
}
if(S_IWUSR & buf.st_mode){
dest[2] = 'w';
}
if(S_IXUSR & buf.st_mode){
dest[3] = 'x';
}
if(S_IRGRP & buf.st_mode){
dest[4] = 'r';
}
if(S_IWGRP & buf.st_mode){
dest[5] = 'w';
}
if(S_IXGRP & buf.st_mode){
dest[6] = 'x';
}
if(S_IROTH & buf.st_mode){
dest[7] = 'r';
}
if(S_IWOTH & buf.st_mode){
dest[8] = 'w';
}
if(S_IXOTH & buf.st_mode){
dest[9] = 'x';
}
printf("文件的权限:");
for(i = 1; i < 10; i++){
printf("%c",dest[i]);
}
printf("\n");
}