Это программа, которую я написал для проверки байтов между файлом и диском.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define BYTES_TO_READ 64
int main(int argc, char **argv)
{
int device = open("/dev/sdz", O_RDWR);
if(device < 0)
{
printf("Device opening error\n");
return 1;
}
int file = open("test.txt", O_RDONLY);
if(file < 0)
{
printf("File opening error\n");
return 2;
}
int byte, device_loc, file_loc;
char *buff_device, *buff_file;
for(byte = 0; byte<BYTES_TO_READ; byte++)
{
device_loc = lseek(device, byte, SEEK_SET); /* SEG FAULT */
file_loc = lseek(file, byte, SEEK_SET);
printf("File location\t%d",file_loc);
printf("Device location\t%d",device_loc);
read(device, buff_device, 1);
read(file, buff_file, 1);
if( (*buff_device) == (*buff_file) )
{
printf("Byte %d same", byte);
}
else
{
printf("Bytes %d differ: device\t%d\tfile\t%d\n",byte, *buff_device, *buff_file);
}
}
return 0;
}
Пожалуйста, не спрашивайте, почему я сравниваю sdz
и файл. Это именно то, что я хотел сделать: записать файл прямо на диск и прочитать его обратно.
sdz
— это устройство обратной связи со ссылкой на /dev/loop0
. Пока неважно, отличаются ли файл и диск, но я хочу, чтобы моя программа работала. С помощью некоторой отладки я нашел, где происходит ошибка сегментации, но я не мог понять, почему.
Короче говоря: почему это дает мне ошибку сегментации?
заранее спасибо
buff_device
выглядит неинициализированным. - person chux - Reinstate Monica   schedule 27.02.2014sdz
— это петлевое устройство. Была бы какая-то разница, если бы это был настоящий диск? - person vfsoraki   schedule 27.02.2014