免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xiaodongma
打印 上一主题 下一主题

stat求文件长度结果不正确 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
21 [报告]
发表于 2007-03-15 10:19 |只看该作者
原帖由 soul_of_moon 于 2007-3-15 09:54 发表

我也感觉LZ的代码应该是别的地方出了问题,因为我在Fedora core 4和Unbutu上就没有碰到问题。很可能是指针没有申请空间,是野指针,被其它的操作覆盖了内容而导致错误。

如果需要清零才能得到正确结果,
我想没几个人程序员能忍受这个。

论坛徽章:
0
22 [报告]
发表于 2007-03-15 10:30 |只看该作者
原帖由 lenovo 于 2007-3-15 10:19 发表

如果需要清零才能得到正确结果,
我想没几个人程序员能忍受这个。

这个我倒是无所谓,关键是从此引申出基础数据类型赋值前要先清零,这个就没法忍受了,以后代码写出来就是这个样子了

  1. int i;
  2. i = 0;
  3. i = 3;
复制代码

论坛徽章:
0
23 [报告]
发表于 2007-03-15 10:37 |只看该作者
原帖由 isnowran 于 2007-3-15 10:30 发表

这个我倒是无所谓,关键是从此引申出基础数据类型赋值前要先清零,这个就没法忍受了,以后代码写出来就是这个样子了

  1. int i;
  2. i = 0;
  3. i = 3;
复制代码

你应该把代码贴出来,大家看看是不会是别的地方出了错

论坛徽章:
0
24 [报告]
发表于 2007-03-15 11:12 |只看该作者
原帖由 soul_of_moon 于 2007-3-15 10:37 发表

你应该把代码贴出来,大家看看是不会是别的地方出了错

兄弟你看差行了,这个错误可不是我提出的,我是对这个错误很费解才问的,得让楼长贴代码

论坛徽章:
0
25 [报告]
发表于 2007-03-15 11:29 |只看该作者
原帖由 isnowran 于 2007-3-15 11:12 发表

兄弟你看差行了,这个错误可不是我提出的,我是对这个错误很费解才问的,得让楼长贴代码

晕倒!再灌个水

论坛徽章:
0
26 [报告]
发表于 2007-03-15 12:02 |只看该作者
原帖由 xiaodongma 于 2007-3-13 22:20 发表
我用stat函数求文件长度时,st_size得到的结果非常大。
可能是什么原因呢?
有没有人遇到过?


首先要保证stat成功执行,如果是stat一个目录的话st_size的值应该是0,如果是文件的话,st_size的大小应该是文件的字节数,如果失败,就是你说的这种情况了.

论坛徽章:
0
27 [报告]
发表于 2007-03-15 12:13 |只看该作者
原帖由 luojiafeng1984 于 2007-3-15 12:02 发表


首先要保证stat成功执行,如果是stat一个目录的话st_size的值应该是0,如果是文件的话,st_size的大小应该是文件的字节数,如果失败,就是你说的这种情况了.

stat 目录,st_size可不是0,呵呵

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
28 [报告]
发表于 2007-03-15 12:27 |只看该作者
原帖由 mynets 于 2007-3-15 12:09 发表

如果库函数对参数有要求,检查到传入的参数不符合,它就应该返回失败了,
LZ的情况是stat返回成功,而结果又不正确,你觉得这种现象合理吗

我敢肯定是他程序的问题。

论坛徽章:
0
29 [报告]
发表于 2007-03-15 12:47 |只看该作者
原帖由 luojiafeng1984 于 2007-3-15 12:02 发表


首先要保证stat成功执行,如果是stat一个目录的话st_size的值应该是0,如果是文件的话,st_size的大小应该是文件的字节数,如果失败,就是你说的这种情况了.

似乎你没注意人家清0之后就正确了,你还认为是stat出错导致的么?
顺便贴一下error情况:
ERRORS
EACCES
Search permission is denied for one of the directories in the path prefix of path. (See also path_resolution(2).)
EBADF
filedes is bad.
EFAULT
Bad address.
ELOOP
Too many symbolic links encountered while traversing the path.
ENAMETOOLONG
File name too long.
ENOENT
A component of the path path does not exist, or the path is an empty string.
ENOMEM
Out of memory (i.e. kernel memory).
ENOTDIR
A component of the path is not a directory.

论坛徽章:
0
30 [报告]
发表于 2007-03-15 12:59 |只看该作者
不好意思,引来这么多讨论!
我把代码贴出来大家看看,我是在一个类似于GCC的交叉编译器编译的!
         struct stat file_buf;
             n = scandir(dir,&namelist,0,alphasort);

             for(i=0;i<n;i++){
              fstat(namelist[i]->d_name,&file_buf);
#if _DEBUG
              printf("the size is %x\n",file_buf.st_size);
#endif
             }
           
这样的话,输出结果非常大,
如果
         for(i=0;i<n;i++){
              memset(&file_buf, 0, sizeof(file_buf));
              fstat(namelist[i]->d_name,&file_buf);
#if _DEBUG
              printf("the size is %x\n",file_buf.st_size);
#endif
             }
结果正确!
望大虾指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP