显示指定路径下所有文件的权限 硬链接数 时间 以及名字
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>
#include<time.h>
#include<errno.h>
#include<dirent.h>
void get_filepermission(mode_t mode)
{
for(int i=0,t=0400;i<9;i++,t=t>>1)
{
if((mode&t)&&i%3==0)
{
putchar('r');
}
else if((mode&t)&&i%3==1)
{
putchar('w');
}
else if((mode&t)&&i%3==2)
{
putchar('x');
}
else
putchar('-');
}
}
void fileinfo( char *pathname)
{
struct stat buf;
if(stat(pathname,&buf)<0)
{
perror("stat");
return;
}
//显示指定路径下所有文件的权限
get_filepermission(buf.st_mode);
//硬链接数
printf(" link:%ld",buf.st_nlink);
//时间
struct tm time;
localtime_r(&buf.st_mtime,&time);
printf(" %d.%02d.%02d %02d:%02d:%02d",time.tm_year+1900,time.tm_mon+1,time.tm_mday,time.tm_hour,time.tm_min,time.tm_sec);
//名字
printf("%s\n",pathname);
}
int main(int argc, const char *argv[])
{
DIR *dp=opendir("../day_3/");//打印到open文件里
if(dp==NULL)
{
perror("opendir");
return -1;
}
while(1)
{
struct dirent *rp=readdir(dp);
if(rp==NULL)
{
if(errno==0)
{
printf("目录文件读取成功\n");
break;
}
else
{
perror("readdir");
return -1;
}
}
fileinfo(rp->d_name);
}
closedir(dp);
return 0;
}
打印指定目录下的所有文件名,除了隐藏文件,输入编号,可以将编号对应的文件内容显示在终端上。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
#include<unistd.h>
#include<errno.h>
int main(int argc, const char *argv[])
{
DIR *dp=opendir("../day_3/");
if(dp==NULL)
{
perror("opendir");
return -1;
}
int count=1;int i=0;
struct dirent *rdp[99];
while(1)
{
struct dirent *rp=readdir(dp);
if(rp==NULL)
{
if(errno==0)
{
printf("目录读取成功\n");
break;
}
else
{
perror("readdir");
return -1;
}
}
if(rp->d_name[0]!='.')
{
printf("[%d] %s\n",count++,rp->d_name);
rdp[i++]=rp;
}
}
//查看文件标号
int n;
printf("请输入你要查看的文件编号:");
scanf("%d",&n);
int fd=open(rdp[n-1]->d_name,O_RDONLY);
if(fd==-1)
{
perror("open");
return -1;
}
char buf[30]="";
while(1)
{
bzero(buf,sizeof(buf));
int res=read(fd,buf,sizeof(buf)-1);
if(res==0)
{
break;
}
printf("%s",buf);
}
close(fd);
closedir(dp);
return 0;