王杰IOday3

#include 
#include 
#include 	
#include 
void get_modepre(mode_t m)
{
	char per[4]="rwx";
	for(int i=0;i<9;i++)
	{
		if((m &(0400>>i))==0)
		{
			putchar('-');
			continue;
		}
		putchar(per[i%3]);
	}
	putchar(' ');
	return;
}

void get_getfiletype(mode_t m)
{
	switch (m & S_IFMT) {
	case S_IFBLK:  printf("b");        break;
	case S_IFCHR:  printf("c");        break;
	case S_IFDIR:  printf("d");        break;
	case S_IFIFO:  printf("p");        break;
	case S_IFLNK:  printf("s");        break;
	case S_IFREG:  printf("-");        break;
	case S_IFSOCK: printf("s");        break;
	default:       printf("unknown?\n")   break;
	}

}
int main(int argc, const char *argv[])
{
	DIR* dp=opendir("./");
	if(NULL==dp)
	{
		perror("opendir");
		return -1;
	}
	struct dirent* rp=NULL;
	int count=0;

	while(1){
		rp =readdir(dp);
		if(NULL==rp)
		{
			break;
		}
		if(*(rp->d_name)!='.'){

			struct stat buf;
			if(stat(rp->d_name,&buf)<0)
			{
				perror("stat");
				return -1;
			}
			//文件类型及权限
			//printf("mode:%o\n",buf.st_mode);
			//
			//printf("uid:%d\n",buf.st_uid);

			struct passwd* pwd = getpwuid(buf.st_uid);
			if(NULL== pwd)
			{
				perror("getpwuid");
				return -1;
			}
			//
			//printf("gid:%d\n",buf.st_gid);

			struct group* grp= getgrgid(buf.st_gid);
			if(NULL==grp)
			{
				perror("getgrgid");
				return -1;
			}
			//
			//printf("time:%ld\n",buf.st_ctime);


			struct tm* info=localtime(&buf.st_ctime);


			get_getfiletype(buf.st_mode);
			get_modepre(buf.st_mode);
			printf("%ld",buf.st_nlink);
			printf(" %s",pwd->pw_name);
			printf(" %s",grp->gr_name);
			printf(" %6ld",buf.st_size);
			printf(" %d月 %d %02d:%02d ",info->tm_mon+1,info->tm_mday,info->tm_hour,info->tm_min);
			printf(" %s\n",rp->d_name);
		}
	}
	return 0;
}
ubuntu@ubuntu:day2$ gcc zuoye.c 
ubuntu@ubuntu:day2$ ./a.out 
-rwxrwxr-x 1 ubuntu ubuntu      0 9月 7 09:45  open.txt
-rwxrwxr-x 1 ubuntu ubuntu  12984 9月 7 18:44  a.out
-rw-rw-r-- 1 ubuntu ubuntu    437 9月 7 16:29  05_opendir.c
-rw-rw-r-- 1 ubuntu ubuntu   1876 9月 7 18:44  zuoye.c
-rw-rw-r-- 1 ubuntu ubuntu    277 9月 7 09:44  01_open.c
-rw-rw-r-- 1 ubuntu ubuntu    380 9月 7 11:16  03_read.c
-rw-rw-r-- 1 ubuntu ubuntu   1565 9月 7 15:56  04_stat.c
-rw-rw-r-- 1 ubuntu ubuntu  63892 9月 7 11:35  1.jpeg
-rwxrwxr-- 1 ubuntu ubuntu     23 9月 7 10:49  write.txt
-rw-rw-r-- 1 ubuntu ubuntu    322 9月 7 10:47  02_write.c
ubuntu@ubuntu:day2$ ls -l
总用量 108
-rw-rw-r-- 1 ubuntu ubuntu   277 九月  7 09:44 01_open.c
-rw-rw-r-- 1 ubuntu ubuntu   322 九月  7 10:47 02_write.c
-rw-rw-r-- 1 ubuntu ubuntu   380 九月  7 11:16 03_read.c
-rw-rw-r-- 1 ubuntu ubuntu  1565 九月  7 15:56 04_stat.c
-rw-rw-r-- 1 ubuntu ubuntu   437 九月  7 16:29 05_opendir.c
-rw-rw-r-- 1 ubuntu ubuntu 63892 九月  7 11:20 1.jpeg
-rwxrwxr-x 1 ubuntu ubuntu 12984 九月  7 18:44 a.out
-rwxrwxr-x 1 ubuntu ubuntu     0 九月  7 09:45 open.txt
-rwxrwxr-- 1 ubuntu ubuntu    23 九月  7 10:49 write.txt
-rw-rw-r-- 1 ubuntu ubuntu  1876 九月  7 18:44 zuoye.c

你可能感兴趣的:(c语言)