第三章 文件操作->3.文件目录操作下有这样一个例子:
编写一个程序,这个程序有一个参数,如果这个参数是一个文件名,我们输出这个文件的大小和最后修改的时间,如果是一个目录我们输出这个目录下所有文件的大小和修改时间.
现在把书中的程序编译了一下,发现如下问题:
1) 如果读取的这个参数是一个文件,程序正常无错误
2)如果读取的这个参数是一个目录,那程序就会打开这个目录,结果在读子目录下文件(只有一个文件:hello.c)时出错,出错代码为
Get stat on hello.c Error: No such file or directory
附上源代码:
#include
#include
#include
#include
#include
#include
#include
static get_file_size_time(const char *filename)
{
struct stat statbuf;
if(stat(filename, &statbuf)== -1)
{
printf("Get stat on %s Error: %s\n", filename, strerror(errno));
return(-1);
}
if(S_ISDIR(statbuf.st_mode)) return(1);
if(S_ISREG(statbuf.st_mode))
{
printf("%s size: %ld bytes\tmodified at %s",
filename, statbuf.st_size, ctime(&statbuf.st_mtime));
}
return(0);
}
int main(int argc, char **argv)
{
DIR *dirp;
struct dirent *direntp;
int stats;
if(argc != 2)
{
printf("Usage: %s filename\n\a", argv[0]);
exit(1);
}
if(((stats=get_file_size_time(argv[1])) == 0)||(stats == -1)) exit(1);
if((dirp=opendir(argv[1]))== NULL)
{
printf("Open Directory %s Error: %s\n",
argv[1], strerror(errno));
exit(1);
}
while((direntp=readdir(dirp))!= NULL)
if(get_file_size_time(direntp->d_name)== -1) break;
closedir(dirp);
exit(1);
}
(6)m:b
jacky012 于 2010-05-05 13:29:44发表:
编译也是出现两个警告,没有别的错误啊
直接读当前目录的文件,不会出错。
我用gdb单步跟踪,出错的情况是这样的:
比如,我输入的参数是“mydir”,这是当前目录下的一个子目录,“mydir”下面有一个文件“hello.c”,那么程序打开mydir目录后,
读取hello.c时在这出错: if(stat(filename, &statbuf)== -1)
出错代码显示为:
Get stat on hello.c Error: No such file or directory
xzj4167 于 2010-05-04 21:22:48发表:
头疼
wangyu 于 2010-05-04 20:10:12发表:
a.c:34: 警告:隐式声明与内建函数‘exit’不兼容
a.c:36: 警告:隐式声明与内建函数‘exit’不兼容
经测试,虽然给出上述警告,但没问题
你在编译的过程中有没有什么错误,比如某个库没有,以至于虽能编译,但却不是预期功能
绿色圣光 于 2010-05-04 19:55:36发表:
经测试,没问题……
楼主是如何执行的?
PS:代码不标准……
shentu 于 2010-05-04 17:13:52发表:
菜鸟~看不懂啊~