![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Хочу, чтобы умирая (die или exit, или еще чего), программа из последних сил сбрасывала все файловые буферы. Как этого можно добиться.
|
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Не буферизировать
![]()
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Я делаю так:
autoflush $fileHandle TRUE; Но не помогает, кажется. То есть я не вижу строк в логе. Хотя должны быть. Кажется. Короче говоря, зуб не дам, но грешу именно на то, что файл без флэша закрывается. |
|||
|
||||
DiverD |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 225 Регистрация: 14.9.2005 Где: Белорусь Репутация: 1 Всего: 2 |
select FH;
$| = 1; или select((select(FH), $|=1)[0]); или my $fh = select(FH); $|++; select($fh); а autoflush эта в ОО, а так такой ф-ции нет. еще глянь perldoc IO::File Это сообщение отредактировал(а) DiverD - 6.12.2006, 17:45 --------------------
[ FreeBSD & pERL p0WER eVERY dAY ] |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Я не знаю как работает autoflush, но принцип таков: Если были буфера в которых осталась инфа, то при умирании они по любому теряються...
Может спасти немедленная запись на диск, то есть без буферизации. Или делать это отдельным процессом, который будет поддерживать буффер открытым, и при умирании процесса сам будет его сбрасывать. Конечно тут возможен вариант аварийного завершения самого следящего процесса. Но здесь можно сделать взаимное слежение, и при умирании одного из пары, второй чтоб сбрасывал общий буфер в обязательном порядке. Конечно одновременное умирание двух процессов тоже возможно, но вероятность такого действа намного меньше ![]() ![]() -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Я тоже в этом направлении думаю. Тока не знаю, как реализовать. Более того, думаю, что скорее всего можно повесить какой-нть обработчик смерти, который не препятствует ей, но в последний момент все-таки просто-напросто говорит
close $fileHandle. Мельком я видел, что можно повесить обрабочик на die. Но из-за мизерного опыта у меня нету уверенности, достаточно ли такого обработчика. Кроме того, возможно, что существует более толковое решение, чем обработчик die. Вобщем, моя проблема в том, что бъем информации большой, а опыта и времени у меня мало. |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
нет, при kill -9 обработчик не вызывается, это безоговорачная смерть
![]() -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Ок. Если отказаться от внешних событий, приводящих к смерти, таких как kill -9 и швабра на рисете (вспомнилось: нет повести печальнее на свете, чем повесть о заклинившем рисете), то существует ли способ поймать момент, непосредственно перед самой смертью. Причем хочется поймать его после того, как все уже перестали писать в файл. В идеале -- последним. На практике -- после всех, кто может писать, но, возможно, перед теми, кто gracefully завершает перл.
Добавлено @ 11:43 Хочу подчеркнуть, что автофлаш я уже включил. Но я почти (!) уверен, что не все успевает записаться. То есть обработчик -- в дополнение к автофлашу, а не замена ему. Таким образом impact от kill -9 или заклинившего рисета минимизируется. |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Упс, ну так я подозреваю, все остальные состояния перл сам вполне корректно обрабатывает, и закрывает хендлы...
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Ок, в деталях.
Беру код. Много кода. Я знаю, какую он решает зачаду. Знаю общий принцип/алгоритм которым он ее решает. Но всех деталей не знаю. Например, я не знаю, а вешает ли он какие-нть подобные обработчики die. Предположим, что вешает. Назовем, для определенности, этот самый обрабтчик именем А. Тогда мой обработчик (назовем его Б), закрывающий файл, должен выполняться после А, так как потенциально А может в процессе своего выполнения писать в файл. Как сделать так, чтобы мой Б выполнялся после всех возможных А? |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
вызывать внутри себя обработчик А а потом самому доделывать все остальные действия, и умирать при необходимости
![]() -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Ха, так кода-то много =) И я не знаю, существует этот А или нет. Я изхожу из того, что возможно существует. Другими словами я хочу так прстроить программу, чтобы она делала все возможное в любом случае.
Если А существует, то Б будет вызываться после всех А. Если нет, то о4хор. Хуже не будет. Вызовется Б и все. Вопрос тока в том, возможно ли как-нть сделать так, чтобы Б вызывался после возможных А, о существовании которых я ничего не знаю, или не возможно. Если невозможно, то я буду искать другие пути. Если возможно, то как. |
|||
|
||||
Nab |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
приблизительно вот так:
-------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
Danissimo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Мега!!! То что надо! ЗАЧООООООООТ!!!!!!!!! Спасибо =))
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |