处理将打开目录、读取其内容并打印出每个文件的信息的代码。它检查命令行,如果没有提供参数,将打印出指定目录或当前目录的内容。下面的代码与用于打印当前目录的代码几乎完全相同。唯一的区别是在第一个 if 语句而不是 argv[1] 中有“.”。下面的代码命中了while循环中的第一个if语句(我设置结果等于当前文件之后的那个),然后对目录中的每个文件说
加载 statBuffer 时出错: : 没有这样的文件或目录
加载 statBuffer 时出错: : 没有这样的文件或目录
加载 statBuffer 时出错: : 没有这样的文件或目录
加载 statBuffer 时出错: : 没有这样的文件或目录
加载 statBuffer 时出错: :没有这样的文件或目录
。thaddueus thaddueus 4096 2013 年 5 月 1 日星期三 18:34:42
加载 statBuffer 时出错: : 没有这样的文件或目录
这是我使用的代码。
else if(argc > 1){
if((dir = opendir(argv[1])) == NULL){
perror("opendir() error");
}else{
while((entry = readdir(dir)) != NULL){
result = stat(entry->d_name, &statBuf);
if(result == -1)perror("Error while loading statBuffer: ");
else{
/*Line of code I added directly below this based upon David's suggestion*/
snprint(pathname, sizeof(pathname), "%s/%s", argv[1], entry->d_name);
/*Addition cause Segmentation fault core dumped*/
if(strncmp(entry->d_name, "..",100) == 0 ||strncmp(entry->d_name, ".",100))
continue;
errno = 0;
pws = getpwuid(statBuf.st_uid);
if(errno != 0)
perror("Error while retriving username: ");
errno = 0;
grp = getgrgid(statBuf.st_gid);
if(errno != 0) perror("Error while retriving groupname: ");
/*Prints the filename*/
printf("%s", entry->d_name);
/*Prints the username*/
printf("\t%s", pws->pw_name);
/*Prints the groupname*/
printf("\t%s", grp->gr_name);
/*Prints the file size*/
printf("\t%ld", (long)statBuf.st_size);
/*Prints the last modification time*/
printf("\t%s\n", ctime(&(statBuf.st_mtime)));
}
}
closedir(dir);
}
}
编辑:那个
. thaddueus thaddueus 4096 2013 年 5 月 1 日星期三 18:34:42
是一个隐藏文件。不确定何时会打印而其他人不会。
EDIT1:对不起。忘了补充说它正在获取文件名。
EDIT2:当我删除错误语句时,它会停止打印错误语句并只打印隐藏文件。