Есть необходимомть создавать файлы на диске D во время работы программы и хранить в них какие-то данные (архивы). Подскажите какими функциями пользоваться fopen или open,
fclose или close и т.д. А то получается какой то глюк во время работы. ADAM подвисает (но не сразу, может пройти и час и два) во время работы с файлом и уходит на перезагрузку. Сторожевой таймер отключен. Места на диске хватает. Запись в фай происходит 1 раз в 1-5 мин. Может кто сталкивался с этим.
Функция fopen("имя_файла","режим_открытия") возвращает указатель на структуру типа FILE.
Функция open(const "имя_файла" , oflags) возвращает дискриптор файла типа int.
Указатель на структуру и int - это немного разные вещи.
Обычный цикл использования fopen:
FILE * in;
in = fopen("имя_файла","режим_открытия");
fwrite(указатель_на_массив, размер_считываемой_структуры,кол-во_считываемых_структур, in);
fclose(in);
Обычный цикл использования open:
int handle;
handle = open("имя_файла",O_RDWR);// флагов много всяких их можно комбинировать.
read(handle,указатель_на_буфер_считывания,кол-во_считываемых_байт);
close(handle);
_____________________
А вообще-то дело не в том как читать/писать. Тут другое,
диск D на вышеуказанном устройстве, это электронный диск (ramdrive), читать/писать можно любой функцией - дело вкуса. А вот за ошибками чтения/записи надо следить строго. Наверное имеет место переполнение диска, и запись/чтение чего попало, с последующей обработкой этого мусора, отсюда и проблема.
Как-то так.
Спасибо за ответ. Но это все не то. Писать в файл действительно можно любой функцией, и проще всего fwrite.
Но Adam, как выяснилось, зависает на fclose. Пока не сделал сторожевому таймеру disable и delay перед fclose ничего непомогало. Сейчас вылечено и работает сутками.
Это танцы с бубном и камлания какие-то :-D
Чего это с адамом стряслось, буферы на диск скинуть не успевает, что-ли.
Ну тогда перед fclose(in) надо попробовать сказать fflush(in);
Может тогда что-то прояснится.
fflush и fflushall все это есть.
Значит, запишем пока в чудеса.
Если заставят с адамами возится, будем разбираться что, к чему.
[заношу в EEPROM головы] :-D
Ваще говоря, настоящая физическая запись файла на диск (или дисковое устройство) происходит функцией fflash, т.е. сброс буфера из памяти на физ. устройство. Надо поэкспериментировать: сразу вместе с записью делать flash, и не держать данные в памяти, а то многое может измениться. FClose можно делать по вкусу - по ситуации.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме