
Сообщение от
SAM style
Выдернуто из контекста, строки перед этим тоже важны. При чтении сектора образ открывается на чтение; если не открылся - его нет, делается попытка его создать и открыть снова; если и вторая попытка провалилась - в этом месте его нельзя создать.
Это всё ещё будет пересматриваться, я только добрался до интерфейса между компом и самим HDD, по этому поводу...
Ну вот этот код вообще суров:
Код:
FILE* file = fopen(dev->image,"rb");
if (file == NULL) {
file = fopen(dev->image,"wb");
if (file) {
fclose(file);
file = fopen(dev->image,"rb");
if (file == NULL) {
Не понял зачем ты после неудачного rb пытаешься создать файл, потом в случае удачи закрываешь и опять открываешь и после этого успешно забиваешь на дескриптор и не закрываешь его.
Код:
Upon successful completion fopen(), fdopen() and freopen() return a FILE pointer. Otherwise, NULL is returned and errno is set to indicate the error.
ИМХО тут не надо ничего создавать. Смог открыть - все ок. Не смог - сказал. Создавалка файла должна быть отдельной. Чую что именно тут возникает проблема с файлом с 0 размера именем, появляющимся бесконечно.
И насколько я вижу это чтение сектора. Я-бы не стал тут постоянно дергать файл туда-сюда это дичайший оверхед и лочка всей проги. Открой его 1 раз и все. Причем надо сразу открывать на w+b чтобы и чтение работало и запись.
PS: для чеков наличия файла могу посоветовать int stat(const char *file_name, struct stat *buf);. Работает значительно быстрее и выдает очень нехило полезной инфы. Опять-же лучше 1 раз ее при ините заюзать и все вместо постоянных
Код:
fseek(file,0,SEEK_END);
eps = ftell(file);
. Они капец какие тормозные. Ну или при реконфиге.
PS2: сорри за суровую критику, но блин привычка. 8)