9.7 IO进程

运行结果:

ubuntu@ubuntu:day2$ ./a.out  ./
drwxr-xr-x 4 ubuntu ubuntu   4096 96 9:31  ..
-rwxrwxr-x 1 ubuntu ubuntu  12984 97 19:32  a.out
-rw-r--r-- 1 ubuntu ubuntu    456 96 14:22  03fwrite.c
-rw-r--r-- 1 ubuntu ubuntu    780 96 17:10  02fgets.c
-rw-r--r-- 1 ubuntu ubuntu    373 97 13:33  07open.c
-rw-r--r-- 1 ubuntu ubuntu    419 96 15:49  04fseek.c
-rw-r--r-- 1 ubuntu ubuntu    461 96 16:24  05time.c
-rw-r--r-- 1 ubuntu ubuntu    354 97 17:41  09opendir.c
drwxr-xr-x 2 ubuntu ubuntu   4096 97 19:32  .
-rw-r--r-- 1 ubuntu ubuntu      0 97 10:48  01fputs.c
-rw-r--r-- 1 ubuntu ubuntu   1835 97 19:32  08stat.c
-rw------- 1 ubuntu ubuntu 380928 97 16:24  core
-rw-r--r-- 1 ubuntu ubuntu    144 96 16:59  06getdtable.c
#include 
void get_fileper(mode_t m)
{
	int i=8;
	while(i>=0)
	{
		if(0==(m&(01<<i))){
			putchar('-');
		}else{
			if(2==i%3){
				putchar('r');
			} 
			else if(1==i%3){
				putchar('w');		
			}else{
				putchar('x');
			}
		}
		i--;
	}
	putchar(' ');
}
void get_fileType(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("l");
				   break;
	case S_IFREG:  printf("-");    
				   break;
	case S_IFSOCK: printf("s");
				   break;
	default:       printf("unknown?");  
				   break;
	}
	return;
}
int main(int argc, const char *argv[])
{
	DIR* dr= opendir(argv[1]);
		if(NULL==dr){
			ERR_MSG("opendir");
			return -1;
		}
	struct stat buf;
	struct dirent *a=NULL;
	while(1){
		a=readdir(dr);
		if(NULL==a)
		{
			break;
		}
		if(stat(a->d_name,&buf)<0)
		{
			ERR_MSG("stat");
			return -1;
		}

		//文件类型
		get_fileType(buf.st_mode);
		get_fileper(buf.st_mode);
		
		//硬链接
		printf("%ld ",buf.st_nlink);

		//用户uid
		struct passwd* pwd=getpwuid(buf.st_uid);
		if(NULL==pwd)
		{
			ERR_MSG("getpwuid");
			return -1;
		}
		printf("%s ",pwd->pw_name);

		//用户组id
		struct group* grp = getgrgid(buf.st_gid);
		if(NULL==grp)
		{
			ERR_MSG("getgrgid");
			return -1;
		}
		printf("%s ",grp->gr_name);

		//文件的大小
		printf("%6ld",buf.st_size);

		//时间
		struct tm* time1=localtime(&buf.st_mtime);
		printf("%2d月 %2d %d:%d  ",time1->tm_mon+1,time1->tm_mday,\
				time1->tm_hour,time1->tm_min);
		printf("%s\n",a->d_name);
	}
	return 0;
}

Xmind:

你可能感兴趣的:(linux)