Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как заставить Windows записать файловые буфера на диск (+)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Vladgul
Гость





СообщениеДобавлено: Пт Июл 11 2003 12:13    Заголовок сообщения: Как заставить Windows записать файловые буфера на диск (+) Ответить с цитатой

Как заставить Windows записать файловые буфера на диск.

Есть система (Client-Server) на Delphi из нескольких программ, которые собирают данные, затем перед отправкой по сети сохраняют накопленные данные в файлах
(в целях повышения сохранности информации. Информация не должна потеряться ни в каком случае, только вместе с компьютером Smile ).
Файлы создаются с помощью потоков TFileStream. При восстановлении (повторном запуске) программы, она считывает файл, проверяет контрольную сумму и только тогда считает файл "целым".

Так вот, если в процессе работы программы и передачи данных резко выгрузить программу из памяти (т.е. сбой питания или еще что-то т.п., хотя мне кажется, что если будет действительно сбой питания, то потери могут быть больше), то теряются несколько записей в файлах.
ИМХО это из-за того, то винды имеют файловый кеш и не сразу записывают данные на винт.

ЧТО МОЖНО СДЕЛАТЬ?
Опять же ИМХО если делать запись файловых буферов на диск, то это должно помочь.

Как записать файловые буфера?
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Пт Июл 11 2003 14:56    Заголовок сообщения: Re: Как заставить Windows записать файловые буфера на диск (+) Ответить с цитатой

Это тебя не спасет. Делай как все путные люди механизм транзакций.
Ну и бесперебойники вроде еще продают. Smile))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vladgul
Гость





СообщениеДобавлено: Пт Июл 11 2003 16:00    Заголовок сообщения: and3008 ты не прав (+) Ответить с цитатой

Какой механизм транзакций, если это просто файловые операции (без использования БД).
Ну и согласись, UPS вещь хорошая, но если программа расчитана на огромную надежность сохранности данных, то UPS ее только дополнит и исключит проблемы с питанием (и то на некоторое время).

А задачи стоят контроля доступа в помещения, когда очень важно не потерять запросы устройств, а также при падении напряжения (или даже перезагрузке компа) не терять уже поступивших данных,т.к. они м.б. критичными для всей системы (попытка проникновения и т.д.)

Если можешь что посоветовать буду признателен.
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Пт Июл 11 2003 17:58    Заголовок сообщения: Re: and3008 ты не прав Ответить с цитатой

В досах и виндах до 95 сбросить буфера на диск можно было командой SMARTDRV /R. Возможно, современные винды сохранили этот атавизм. Если нужно сбросить данные на диск в программе, которую сам делаешь, то нужно использовать небуферируемую запись. А если действительно нужна гарантированная сохранность данных, то выбрось винды в форточку и поставь юникс.
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Пн Июл 14 2003 15:41    Заголовок сообщения: Re: and3008 ты не прав Ответить с цитатой

Ставь QNX. Кстати, с железом на ней работать - одно удовольствие и вся документация внутри в HTML.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sclis
Гость





СообщениеДобавлено: Чт Июл 31 2003 05:18    Заголовок сообщения: Re: and3008 ты не прав Ответить с цитатой

Господа! Какой *никс? Smile) там что операции с хардом не кэшируются?
Копить информацию в оперативке до обращения к харду - политика ОС вполне обычная для нормальной ОС. отключать (даже если получится такое) его значит сильно тормозить систему. Да и как быть с кэшем самого харда? Причем толку от этого не будет.
Если на машинке ресет нажать что будет? она при следующей загрузке начнет хард проверять и найдет потеряные кластеры! - это как раз незакрытые файлы! значит, если тебе и удасться отключить кэширование данных для конкретного файла (что вобще вряд ли), то во много раз возрастет вероятность потери всего файла => надо делать архивную копию... а поскольку даже самая свежая копия младше оригинала, то ты будешь терять как раз те самые несколько записей, что и сейчас.
Вывод: наверно люди не зря придумывали базы данных, транзакции, УПС, отказоустойчивые конфигурации. не пытайся все это засунуть в одну процедуру Дельфи.
А что касается систем высокой надежности - облом-с: как пишут некоторые производители РС-комплектухи: "не для систем связанных со спасением людей и не для медицины"(с)-почти цитата Smile так что это даже другое железо.
Все же оптимальный вариант - серверБД с УПСом и запасом прочности и отдельная добротная физическая подсеть до клиента.
Вернуться к началу
grayrat



Зарегистрирован: 30.06.2003
Сообщения: 189

СообщениеДобавлено: Чт Июл 31 2003 11:19    Заголовок сообщения: к слову Ответить с цитатой

В QNX 4.25 вообще отсутствует своп. Но это наоборот, не добавляет а исключает возиожность тормозов связанных со свопингом.
Вообще, это ОС реального времени, построена по архитектуре микроядра, компактная, простая и надёжная, предсказуемая. Операции же с дисками кэшируются на уровне библиотеки stdio, которую никто не заставляет использовать. Кстати, в ней есть такая функция - flush, как, впрочем, и в любой другой (я так думаю) кэшируемой системе/библиотеке работы с файлами. QNX как раз и используют когда важно не потерять поступающие с большой скоростью данные. Пока есть питане, можно быть уверенным что система не войдёт в своп и пропустит пакет(ы) данных. Время реакции на прерывания тоже известное и постоянное (ок. 20 тактов). Это касательно самой системы, а касательно того что механизм транзакций незря придуман, конечно, согласен безусловно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sclis
Гость





СообщениеДобавлено: Пн Авг 04 2003 05:40    Заголовок сообщения: Re: к слову Ответить с цитатой

нет. стоп. своп и кэширование - суть вещи сильно разные, даже противоположные. о свопе речи не идет...
своп держит на харде, то, что не влезло в оперативку, а кэширование держит в оперативке то, что еще не записано на хард. Отключить своп в виндах - не проблема, (правильно? галочка где надо ставится и перезагружается машина, только будут большие проблемы, если вдруг оперативки понадобится больше, чем физически ее стоит - это значит никаких клиентских программ... никаких документов... ничего лишнего)
Если уж сильно приспичит - можно и в виндах написать драйвер режима ядра, который будет использовать (например) выделенный раздел для записи критически важного файла. И там можно будет /flash использовать так же как в QNX. При этом не потеряется знакомость интерфейса... ну и т.д. но все это сильно выходит за рамки "уже написанная программа на дельфи" и получается слишком сложно.
Клиентская машина должна оставаться клиентской. QNX, как видно - прекрасная вещь, но как встроенная ОС в самостоятельный прибор (без программ и документов... для одного дела), а для архитектуры клиент-сервер, все же предпочтительней более простые средства, и более используемые... и универсальные.
а что может быть проще вложений в надежность оборудования (сеть и УПС) и проверенный SQL-сервер на серваке с запасом прочности?Smile)
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...