红联Linux门户
Linux帮助

关于“Linux操作系统下C语言编程入门(中文)”中例题

发布时间:2010-05-04 16:04:57来源:红联作者:jacky012
正在学习丛论坛里下的这份资料,现遇到一个问题,哭求高手指教!!!!!!!!!!
第三章 文件操作->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
文章评论

共有 5 条评论

  1. 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

  2. xzj4167 于 2010-05-04 21:22:48发表:

    头疼

  3. wangyu 于 2010-05-04 20:10:12发表:

    a.c:34: 警告:隐式声明与内建函数‘exit’不兼容
    a.c:36: 警告:隐式声明与内建函数‘exit’不兼容


    经测试,虽然给出上述警告,但没问题

    你在编译的过程中有没有什么错误,比如某个库没有,以至于虽能编译,但却不是预期功能

  4. 绿色圣光 于 2010-05-04 19:55:36发表:

    经测试,没问题……
    楼主是如何执行的?

    PS:代码不标准……

  5. shentu 于 2010-05-04 17:13:52发表:

    菜鸟~看不懂啊~