Esempio n. 1
0
/*
 * 	根据命令行参数和完整路径名显示目标文件
 * 	参数flag: 命令行参数
 * 	参数pathname: 包含了文件名的路径名
 */
void display (int flag, char *pathname) {

	int i, j;
	struct stat buf;
	char name[NAME_MAX + 1];

	//从路径解析文件名
	for (i = 0, j = 0; i < strlen(pathname); i++) {
	
		if (pathname[i] == '/') {
		
			j = 0;
			continue;
		
		}

		name[j++] = pathname[i];
	
	}
	name[j] = '\0';

	//用lstat解析链接文件
	if (lstat (pathname, &buf) == -1) {
	
		my_err ("stat", errno);
	
	}

	switch (flag) {
	
		case PARAM_NONE: 	//无 -l, -a;
			if (name[0] != '.') {
			
				display_single (name);
			
			}
			break;
		case PARAM_A:  		//-a;
			display_single (name);
			break;
		case PARAM_L: 		//-l;
			if (name[0] != '.') {
			
				display_attribute (buf, name);
				printf (" %-s\n", name);
			
			}
			break;
		case PARAM_A + PARAM_L: //-a,-l
			display_attribute (buf, name);
			printf (" %-s\n", name);
			break;
	
	}

}
Esempio n. 2
0
/*
 * 根据命令行参数和完整路径名显示目标文件
 * 参数flag: 		命令行参数
 * 参数pathname: 	包含了文件的路径名
 */
void display (int flag, char *pathname)
{
	int i, j;
	struct stat 	buf;
	char name[PATH_MAX + 1];

	/* 从路径中解析出文件名 */
	for (i = 0, j = 0; i < strlen (pathname); i++) {
		if (pathname[i] == '/') {
			j = 0;
			continue;
		}

		name[j++] = pathname[i];
	}
	name[j] = '\0';

	/* lstat函数来方便解析链接文件,获取文件的状态信息 */
	if (lstat (pathname, &buf) == -1) {
		my_err ("lstat", errno);
	}
	/* 
	 * 参数pathname指定文件的路径。
	 * 参数buf表示存储stat结构的缓冲区的地址。
	 * stat结构用于存储文件的状态信息。
	 */

	switch (flag) {
		case PARAM_NONE: 	//没有-l和-a选项
			if (name[0] != '.') 
			      display_single (name);
			break;
		case PARAM_A: 		
			display_single (name);
			break;
		case PARAM_L:
			//printf ("total  %d\n", count);
			if (name[0] != '.') {
				display_attribute (buf, name);
				printf ("  %-s\n", name);
			}
			break;
		case PARAM_A + PARAM_L:
			//printf ("total  %d\n", count);
			display_attribute (buf, name);
			printf ("  %-s\n", name);
			break;
		default:
			break;
	}
}
Esempio n. 3
0
void display(int flag,char* pathname)
{
	int i,j;
	struct stat buf;
	char name[NAME_MAX+1];

	//extract the file name from pathname;
	for(i=0,j=0;i<strlen(pathname);i++)
	{
		if(pathname[i]=='/')
		{
			j=0;
			continue;
		}
		name[j++]=pathname[i];
	}
	name[j]='\0';

	if(lstat(pathname,&buf)==-1)
	{
		my_err("lstat",errno,__LINE__);
	}
	switch(flag)
	{
		case PARAM_NONE://no any argument
			if(name[0]!='.')
			{
				display_single(name);
			}
			break;
	        case PARAM_L://-l
			if(name[0]!='.')
			{
				display_attribute(buf,name);
				printf(" %-s\n",name);
			}
			break;
		case PARAM_A://-a
			//the first character of hidden files is '.'(dot)
			display_single(name);
			break;
		case PARAM_A+PARAM_L://-a -l
			display_attribute(buf,name);
			printf(" %-s\n",name);
			break;
		default:
			break;
	}
}
Esempio n. 4
0
void display_R(int flag,char *pathname)
{
    int i,j;
    struct stat buf;
    char name[NAME_MAX + 1];
    for(i=0,j=0;i<strlen(pathname);i++)
    {
        if(pathname[i] == '/')
        {
            j = 0;
        }
        else
            name[j++] = pathname[i];
    }
    name[j] = 0;

    if(lstat(pathname,&buf) == -1)
    {
        my_error("stat",__LINE__);
    }

    if(flag == PARAM_NONE)
    {
        if(name[0] != '.')//不显示隐藏文件
        {
            display_single(name);
        }
    }
    else if(flag == PARAM_A)
    {
        display_single(name);
    }
    else if(flag == PARAM_L)
    {
        if(name[0] != '.')
        {
            display_attribute(buf,name);
            printf(" %-s\n",name);
        }
    }
    else if(flag == (PARAM_A | PARAM_L))
    {
        display_attribute(buf,name);
        printf(" %-s\n",name);
    }

}
Esempio n. 5
0
void display(int flag, char pathname[], int  sT_INO)     //是不是-i,name是文件名
{
	int          i,j;
	struct stat buf;
        char         name[NAME_MAX+1];

	/*从路径中解析出文件*/
	for(i=0,j=0; i<strlen(pathname); i++){
		if(pathname[i]=='/'){
			j=0;
			continue;
		}

		name[j++]=pathname[i];
	}
	name[j]='\0';
	/*用lstat而不是stat以方便解析链接文件*/

if( lstat(pathname, &buf) ==-1 ){
		my_err("stat",__LINE__);
	}
	switch(flag){
		case PARAM_NONE:               //没有-l和-a选项
			if(name[0] != '.'){
				display_single(name,sT_INO,buf);
			}
			break;
		case PARAM_A:                 //-a显示包括隐藏文件在内的所有文件
			display_single(name, sT_INO, buf);
			break;
		case PARAM_L:                //-l每个文件单独占一行,显示文件详细属性信息
			if(name[0] != '.'){
				display_attribute(buf,name);
				printf("  %-s\n",name);
			}

			break;
		case PARAM_A+PARAM_L:        //同时有-a和-l的选项
			display_attribute(buf,name);
			printf("  %-s\n",name);
			break;
		default:
			break;
	}
}
Esempio n. 6
0
//信息输出
void output(struct stat *buf, char *path)
{

    if (opt.a == 1) {
        if (opt.l == 1) {
            display_attribute(buf, path);
        } else {
            display_single(path);
        }
    } else {
        if (path[0] != '.') {
            if (opt.l == 1) {
                display_attribute(buf, path);
            } else {
                 display_single(path);
            }
        }
    }
}
Esempio n. 7
0
void display(int flag, char *pathname)
{
    int i, j;
    struct stat  buf;
    char name[NAME_MAX+ 1];
    for(i=0, j=0; i<strlen(pathname); i++)
    {
        if(pathname[i] == '/')
        {
            j = 0;
            continue;
        }
        name[j++] = pathname[i];
    }
    name[j] = '\0';
    if(lstat(pathname, &buf) == -1) {
        my_err("stat", __LINE__);
    }
    switch(flag) {
    case PARAM_NONE:
        if(name[0] != '.') {
            display_single(name);
        }
        break;
    case PARAM_A:
        display_single(name);
        break;
    case PARAM_L:
        if(name[0] != '.') {
            display_attribute(buf/*, name*/);
            printf(" %-s\n", name);
        }
        break;
    case PARAM_A + PARAM_L:
        display_attribute(buf/*, name*/);
        printf("  %-s\n", name);
        break;
    default:
        break;
    }
}
Esempio n. 8
0
/* 
*	根据命令行参数和完整路径名显示目标文件	
*	参数 flag: 命令行参数
*       参数 pathname : 包含了文件名的路径名
*/
void display(int flag, char *pathname)
{
	int i, j;
	struct stat buf;
	char name[1000];
	
	/*从路径中解析出文件名*/
	for(i=0,j=0; i<strlen(pathname); i++)
	{
		if(pathname[i] == '/')
		{
			j = 0;
			continue;
		}
		name[j++] = pathname[i];
	}
	name[j] = '\0';
	
	if (lstat(pathname, &buf) == -1)
	{
		my_err("stat", __LINE__);
	}
	
	switch (flag)
	{
	case PARAM_NONE:                            //没有-a 和-l选项
		if (name[0] != '.')
		{
			display_single(name);
		}
		break;
	
	case PARAM_A:                               //-a 选项
			display_single(name);
			break;

	case PARAM_L:                               //-l 选项
		if (name[0] != '.')
		{
			display_file(buf, name);
		}	
		break;

	case PARAM_A + PARAM_L:                     //-a和-l 选项
			display_file(buf, name);
			break;
	
	case PARAM_I:				   //-i选项
		if (name[0] != '.')
		{
			display_sangle(name,buf);
		}
		break;
	
	case PARAM_R:				    //-r选项
		if ( name[0] != '.')
		{
			display_single(name);
		}
		break;

	default:
			break;
	}
	
}