这个非常简单的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结构没有被释放有关,但我不确定。如果我为失败案例运行它,就没有段错误。
答案 0 :(得分:2)
更改
if (stat(argv[1], &sf) == 0 ) {
到
if (statfs(argv[1], &sf) == 0 ) {
你应该没事。
如上所述,请使用编译器选项-Wall
来及早发现令人讨厌的错误。