Есть ли в вашей системе устройство / dev / sda
?
К какому типу относится переменная driveid?
Покажите нам весь код или попробуйте изменить driveid на:
struct hd_driveid driveid;
Затем вы можете распечатать его содержимое, например:
printf("Firmware Revision=%.8s\n",driveid.fw_rev);
printf("Cylinders=%d\n",driveid.cyls);
Также проверьте: http://lxr.free-electrons.com/source/include/linux/hdreg.h?v=2.6 .32
Если вы хотите понять , почему это так, вам нужно понять разницу между файлами и индексными дескрипторами. rm, rmdir и mv воздействуют на индексные дескрипторы, описывающие файл/каталог, а не фактический файл. Если у вас есть открытый файл/каталог (, например. находясь в каталоге ), информация об индексе удаляется, но фактический файл данных, связанный с файлом/каталогом, не удаляется до тех пор, пока все дескрипторы файлов, указывающие на него, не будут закрыты. Итак, когда вы «cd..», файловая система может налететь и удалить каталог и все его содержимое.