这个非常简单的C代码编译并运行,但它在结束时会中断。我不明白为什么。
#include <sys/types.h>
#include <sys/statfs.h>
#include <stdio.h>
int main(int argc, char **argv) {
struct statfs sf;
if (stat(argv[1], &sf) == 0 ) {
printf( "Statfs succeeded!\n");
printf("\tFs type:\t %#lx\n", sf.f_type);
printf("\tTotal blocks:\t %lu\n", sf.f_blocks);
printf("\tFree blocks:\t %lu\n", sf.f_bavail);
printf("\tinodes:\t %lu\n", sf.f_files);
} else {
printf("Statfs failed!\n");
return 1;
}
return 0;
}
编译并运行:
[root@dadam-4 ~]# gcc statfs-test.c -o statfs-test
[root@dadam-4 ~]# ./statfs-test /dev/sda1
Statfs succeeded!
Fs type: 0x5
Total blocks: 1
Free blocks: 6
inodes: 2049
Segmentation fault (core dumped)
它认为问题与statfs结构没有被释放有关,但我不确定。如果我为失败案例运行它,就没有segfault。
最佳答案
改变
if (stat(argv[1], &sf) == 0 ) {
进入之内
if (statfs(argv[1], &sf) == 0 ) {
你应该没事的。
如n.m.所述,请使用编译器选项
-Wall
来早期检测严重错误。