【发布时间】:2012-09-09 12:10:52
【问题描述】:
我正在进行一个 stat() 调用,它返回一个包含我想要提取的信息的结构。到目前为止,我成功地得到了我想要的,直到获得文件的访问时间、修改时间和最后更改时间。
我想用ctime来获取,然后用printf打印出来。
printf("File: %s",argv[1]);
printf("\nSize: %d",result.st_size);
printf(" Blocks: %d",result.st_blocks);
printf(" IO Block: %d",result.st_blksize);
printf("\nDevice: 0x%x",result.st_dev);
printf(" Inode: %d",result.st_ino);
printf(" Links: %d",result.st_nlink);
// printf("\nAccess: %s",ctime(result.st_atime));
这段代码运行良好,输出如下:
File: /etc/passwd
Size: 2250043 Blocks: 4416 IO Block: 4096
Device: 0x6804 Inode: 9738432 Links: 1
如果我取消注释要获取访问时间的最后一行,我会得到以下输出:
File: /etc/passwd
Size: 2250043 Blocks: 4416 IO Block: 4096
Segmentation fault
我该如何解决这个问题?另外,为什么我会在设备、Inode 和链接打印出来之前遇到分段错误?不应该打印出来然后产生分段错误吗?
我的 C 语言经验几乎为零。我在之前的课程中学习过汇编,但非常简短。我试图阅读 time.h 的 API,但我无法真正找到解决方案。
非常感谢我能得到的任何帮助或提示!
谢谢, Z
【问题讨论】:
-
printf 通常是行缓冲的。在看到换行符之前不会打印任何内容(默认情况下)。换行符是最后一个失败的 printf,因此 Device 行不会出现在屏幕上。
标签: c gcc segmentation-fault