这个非常简单的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来早期检测严重错误。

10-06 01:46