1
Этот очень простой C-код компилируется и запускается, но он segfaults, когда он заканчивается. Я не могу понять, почему.Почему эта простая C-программа segfault?
#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;
}
компилировать и запускать:
[[email protected] ~]# gcc statfs-test.c -o statfs-test
[[email protected] ~]# ./statfs-test /dev/sda1
Statfs succeeded!
Fs type: 0x5
Total blocks: 1
Free blocks: 6
inodes: 2049
Segmentation fault (core dumped)
Это думаю, что проблема связана с statfs не STRUCT будучи освобожденным, но я не уверен. Нет никакого segfault, если я запустил его для случая сбоя.
Это должно быть 'struct stat', а не' struct statfs', я думаю. –
@AlexFarber: 'stat' использует' struct stat', 'statfs' использует' struct statfs', см. [Man page] (http://man7.org/linux/man-pages/man2/statfs.2.html) –
@MOehm: правый, но код в вопросе использует 'stat' с' struct statfs' –