Файловая система в ADAM5510E/TCP |
Ответить |
Автор | |
Новичок Присоединился: 25 Январь 2006 Категория: Belarus Online Status: Offline Публикации: 5 |
Опубликовано: 26 Январь 2009 16:57 |
Есть необходимомть создавать файлы на диске D во время работы программы и хранить в них какие-то данные (архивы). Подскажите какими функциями пользоваться fopen или open,
fclose или close и т.д. А то получается какой то глюк во время работы. ADAM подвисает (но не сразу, может пройти и час и два) во время работы с файлом и уходит на перезагрузку. Сторожевой таймер отключен. Места на диске хватает. Запись в фай происходит 1 раз в 1-5 мин. Может кто сталкивался с этим. |
|
Новичок Присоединился: 20 Январь 2009 Online Status: Offline Публикации: 7 |
|
Функция 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), читать/писать можно любой функцией - дело вкуса. А вот за ошибками чтения/записи надо следить строго. Наверное имеет место переполнение диска, и запись/чтение чего попало, с последующей обработкой этого мусора, отсюда и проблема. Как-то так. |
|
Новичок Присоединился: 25 Январь 2006 Категория: Belarus Online Status: Offline Публикации: 5 |
|
Спасибо за ответ. Но это все не то. Писать в файл действительно можно любой функцией, и проще всего fwrite.
Но Adam, как выяснилось, зависает на fclose. Пока не сделал сторожевому таймеру disable и delay перед fclose ничего непомогало. Сейчас вылечено и работает сутками. |
|
Новичок Присоединился: 20 Январь 2009 Online Status: Offline Публикации: 7 |
|
Это танцы с бубном и камлания какие-то :-D
Чего это с адамом стряслось, буферы на диск скинуть не успевает, что-ли. Ну тогда перед fclose(in) надо попробовать сказать fflush(in); Может тогда что-то прояснится. |
|
Новичок Присоединился: 25 Январь 2006 Категория: Belarus Online Status: Offline Публикации: 5 |
|
fflush и fflushall все это есть.
|
|
Новичок Присоединился: 20 Январь 2009 Online Status: Offline Публикации: 7 |
|
Значит, запишем пока в чудеса.
Если заставят с адамами возится, будем разбираться что, к чему. [заношу в EEPROM головы] :-D |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
Ваще говоря, настоящая физическая запись файла на диск (или дисковое устройство) происходит функцией fflash, т.е. сброс буфера из памяти на физ. устройство. Надо поэкспериментировать: сразу вместе с записью делать flash, и не держать данные в памяти, а то многое может измениться. FClose можно делать по вкусу - по ситуации. С уважением, SAN |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |