免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2196 | 回复: 16
打印 上一主题 下一主题

我遇到一个非常奇怪的问题,见附件图,请大家帮帮忙! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-28 14:38 |只看该作者 |正序浏览
顺便说一下,我刚开始学习UNIX C,有点笨笨,请大家见谅!
类似的代码在SESU上运行正常,而在FREEBSD上就出现了问题(访问时间为空)!

stat_test.png (14.25 KB, 下载次数: 25)

错误截图

错误截图

论坛徽章:
0
17 [报告]
发表于 2006-04-28 16:39 |只看该作者
非常感谢 谢谢啦

论坛徽章:
0
16 [报告]
发表于 2006-04-28 16:32 |只看该作者
pfpf

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
15 [报告]
发表于 2006-04-28 16:31 |只看该作者
原帖由 wingger 于 2006-4-28 16:25 发表
我知道是怎么回事了。

FreeBSD 上的 statbuf.st_size 是 64 位的,因此得用 %lld 来 printf
[code]$ cat ttt.c
# include <sys/stat.h>
# include <errno.h>

char *filename = "/etc/p ...

顶!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2006-04-28 16:28 |只看该作者
因为 statbuf.st_size 是 64 位的,而 %ld 只使用了 32 位,因此栈里面 statbuf.st_size 剩下的 32 位会被后来的 %s 使用,从而导致 %s 的结果不正确。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2006-04-28 16:25 |只看该作者
我知道是怎么回事了。

FreeBSD 上的 statbuf.st_size 是 64 位的,因此得用 %lld 来 printf
  1. $ cat ttt.c
  2. # include <sys/stat.h>
  3. # include <errno.h>

  4. char *filename = "/etc/passwd";

  5. int main( void )
  6. {
  7.     struct stat statbuf;

  8.     if ( stat(filename, &statbuf) == -1 ){
  9.         perror( filename );
  10.         return -1;
  11.     }

  12.     printf( "Size: %ld\n", statbuf.st_size );
  13.     printf( "Last Access Time: %s", ctime( &statbuf.st_atime ) );

  14.     printf( "sizeof st_size: [%d]\n", sizeof(statbuf.st_size) );
  15.     printf( "Size: %lld \t Last Access Time: %s\n", statbuf.st_size,
  16.             ctime( &(statbuf.st_atime) ) );
  17.     printf( "\n------------\n" );
  18.     return 0;
  19. }
  20. $ cc -o ttt ttt.c
  21. $ ./ttt
  22. Size: 1376
  23. Last Access Time: Fri Apr 28 15:49:33 2006
  24. sizeof st_size: [8]
  25. Size: 1376       Last Access Time: Fri Apr 28 15:49:33 2006


  26. ------------
复制代码

论坛徽章:
0
12 [报告]
发表于 2006-04-28 16:13 |只看该作者
Solaris8和Linux2.6都没事阿

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2006-04-28 16:06 |只看该作者
OpenBSD上测试过了
一样的结果

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2006-04-28 16:00 |只看该作者
原帖由 cjaizss 于 2006-4-28 15:51 发表
LZ先把代码贴出来

图片上就是代码
不过我还是帖一份吧。

  1. $ cat ttt.c
  2. # include <sys/stat.h>
  3. # include <errno.h>

  4. char *filename = "/etc/passwd";

  5. int main( void )
  6. {
  7.     struct stat statbuf;

  8.     if ( stat(filename, &statbuf) == -1 ){
  9.         perror( filename );
  10.         return -1;
  11.     }

  12.     printf( "Size: %ld\n", statbuf.st_size );
  13.     printf( "Last Access Time: %s", ctime( &statbuf.st_atime ) );

  14.     printf( "Size: %ld \t Last Access Time: %s\n", statbuf.st_size, ctime( &(statbuf.st_atime) ) );
  15.     printf( "\n------------\n" );

  16.     return 0;
  17. }
复制代码

[ 本帖最后由 wingger 于 2006-4-28 16:03 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2006-04-28 15:51 |只看该作者
LZ先把代码贴出来
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP