|
我按照精华贴里的教程一步步学c编程,看到“文件”一篇时,有这样一个例子:
#include<stdio.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/errno.h>
#include<dirent.h>
#include<unistd.h>
static int 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)
{
get_file_size_time(direntp->d_name); //A
}
closedir(dirp);
exit(1);
}
这个程序有一个参数.如果这个参数是一个文件名,我们输出这个文件的大小和最后修改的时间,如果是一个目录我们输出这个目录下所有文件的大小和修改时间.
当我运行程序并输入一个目录名时,它总是显示no such file or directory.
但是如果我把A行住掉,换成:
struct stat statbuf;
stat(direntp->d_name,&statbuf);
printf("%s size:%ld bytes\tmodified at %s",direntp->d_name,statbuf.st_size,ctime(&statbuf.st_mtime));
也就是把get_file_size_time函数里的一部分拿出来,这样的话就正常了,我百思不得其解,为什么之前向get_file_size_time函数传参数的时候就会出错呢?请各位大虾指教阿!! |
|