/* * 根据命令行参数和完整路径名显示目标文件 * 参数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; } }
/* * 根据命令行参数和完整路径名显示目标文件 * 参数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; } }
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; } }
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); } }
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; } }
//信息输出 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); } } } }
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; } }
/* * 根据命令行参数和完整路径名显示目标文件 * 参数 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; } }