|
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
|
|
Сигналы. Зачем использовать флаг SA_RESTART?12.03.2011, 15:46. Показов 7341. Ответов 35
Метки нет (Все метки)
Зачем использовать флаг SA_RESTART, если он поддерживается "некоторыми" системами для "некоторых" системных вызовов? Не надежней ли делать проверку на наличие EINTR?
0
|
|
| 12.03.2011, 15:46 | |
|
Ответы с готовыми решениями:
35
Сигналы DoubleClicked() и флаг Qt::ItemIsSelectable для QTableWidget Зачем нужен флаг в реализации алгоритма Флойда? Зачем использовать def |
|
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
|
||||
| 14.03.2011, 00:24 [ТС] | ||||
0
|
||||
|
|
|||
| 14.03.2011, 08:34 | |||
|
А вообще, по таким сложным вещам крайне НЕ рекомендую читать русскоязычные переводы. Или по крайней мере перевод без оригинала под рукой. Не раз уже встречался с тем, что русский вариант невозможно понять, либо переведено формально правильно, но с возможной двоякой трактовкой и первая трактовка, которая приходит на ум, оказывается неверной
0
|
|||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 14.03.2011, 09:27 | |||
|
Т.е. его именно оборачиваем по типу как вы показали для read() с добавками по вкусу типа ловли EAGAIN, учета ожидающих соединений и тд. Добавлено через 7 минут Сможете поведать что такое "внешний" сигнал, и очевидно "внутренний"? Ну или хотя бы разницу между ними. И почему код должен помирать от SIGINT? это же не SIGKILL...
0
|
|||
|
|
||
| 14.03.2011, 11:29 | ||
|
"Внешний" сигнал - сигнал, вызванный "внешними" по отношению к задаче причинами: пользователь нажал Ctrl-C, пользователь набрал в консоли kill, другая программа (в том числе и родственная программа, или поток) послала сигнал. "Внутренние" сигналы возникают по причинам, вызыванным работой саой программы: программа сама себе послал сигнал, программа выполнила недопустимую операцию, программа нарвалась на плавающее исключение и т.п.
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 14.03.2011, 11:56 | ||
|
Мне казалось, что по сути я ответил в 1м посте и ТС ответ удовлетворил...
Могу повторить если нас читают "танкисты": Я считаю, что смысл использовать SA_RESTART при написании нового портабельного кода (а не адаптации старого BSD4) есть _только_ в одном случае - не возможность проверить EINTR. Во всех остальных случаях его использовать _не_ надо т.к. учет поведение всего зоопарка современных ОС потребует неоправданно много труда на разработку и отладку. Наиболее простая, а потому более надежная стратегия запрещать сигналы в критических местах кода. Если вы с этим не согласны, то я с _удовольствием_ выслушаю аргументы. А пока от вас слышно только "вопроса я не понял", словоблудие на тему "не читайте советских газет" и весьма вольный пересказ ман sigaction
Как (непонятно зачем) введенное вами разделение сигналов на "внутренние" и "внешние" влияет на поведение SA_RESTART или на EINTR или на что-то еще? Может программа не упадет если пошлет сама себе _любой_ не запрещенный сигнал для которого не установлен обработчик? так нет. Может "внешние" сигналы надо обрабатывать как-то по особенному? так тоже нет. В чем же разница???
0
|
||
|
|
|||
| 14.03.2011, 13:04 | |||
|
0
|
|||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 14.03.2011, 13:40 | |||
|
И рассусоливать ему разницу между BSD и SVR способами работы с сигналами _не_ нужно. Наверное дело в том, что вы не читали Стивенса (его можно добыть и в оригинале, но поверьте на слово, перевод адекватный).
1. Какие сигналы: это не важно, для _любого_ сигнала который можно перехватить поведение в контексте SA_RESTART будет одинаковым. 2. Условия возникновения: И это не важно. Т.к. если сигнал явным образом не блокирован программой поведение системы _не_ измениться в независимости от того кто и как этот сигнал не послал. 3. Собственно сискол который может быть прерван: Да тут есть, о чем говорить. Как уже минимум 3раза писалось в этом топике тут полные разброд и шатания у разных ОС. А учитывая качество man'ов отстающих от реальности на годы, дело вообще плохо. Именно это и есть основной довод против применения SA_RESTART. В качестве прикола в свое время в comp.unix.programmer утверждали, что ранний линукс мог вернуть EINTR на sigaction()
0
|
|||
|
|
|||
| 14.03.2011, 14:37 | |||
|
0
|
|||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 14.03.2011, 15:01 | |||
|
Фактически этим вы утверждаете, что такого же поведения не добиться проверкой на EINTR. Что очевидно является не правдой.
0
|
|||
|
|
|||
| 14.03.2011, 15:31 | |||
|
А вот обрабатывать EINTR - это уже вопрос второго уровня: если у нас нет сигналов с SA_RESTART, то EINTR вроде бы как и незачем обрабатвывать (потому что таких ситуаций быть не должно). Если имеются обработчики с SA_RESTART, значит в программе мы должны учесть такую возможность. Если мы знаем, что по SIGINT'у мы отложим завершение работы только в том случае, если формируется файл сданными, то нам, мягко говоря, плевать на EINTR'ы, возникшие в accept'ах. Если мы будем откладывать завершение до того момента, пока не прочтём все данные из сети, то приработе с read нам надо заложить возможность возникновения EINTR'а. Потому я и говорю, что хотелось бы обсудить конкретную причину в конкретной задаче
0
|
|||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||||
| 14.03.2011, 15:51 | ||||
0
|
||||
|
|
||||
| 14.03.2011, 16:04 | ||||
|
0
|
||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 14.03.2011, 16:27 | |||
|
Попробую резюмировать специально для вас. 1. Любой доставленный сигнал без флага SA_RESTART прервет любой сискол (ну или покрайней мере тот у которого в мане прописан EINTR) 2. Есле же для сигнала был установлен флаг SA_RESTART то тут начинаются неоднозначности. Часть сисколов не будут перезапущенны и система вернет EINTR как для случая 1 (для портабельного приложения критично то, что конкретный список таких сисколов различен для разных систем.) Т.е. получается, что при использовании SA_RESTART мы все равно должны проверять EINTR. Отсюда и вопрос ТС "а нафига тогда вообще использовать SA_RESTART". Ответ на него вы вроди видели.
1
|
|||
|
|
|
| 14.03.2011, 17:02 | |
|
Остался только один вопрос. Ты говоришь "перезапущен", но фактически это означает "доисполнить до конца начиная с точки прерывания" (другими словами, будет исполно так, как будто бы сигнала и не было)? Или всё-таки что-то другое (с ходу, например, не понятно, почему с connect'ом должны быть проблемы)?
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||||||
| 14.03.2011, 17:21 | |||||||
|
Например тот же read()/write() если успел хоть что-то прочитать/записать перезапускаться не будет, а вернет то что успел сделать на момент получения сигнала. Конретно про connect там устроенно так (линукс):
Для нас, прикладных программистов, это значит что если мы словили EINTR на сonnect() то придется делать poll/select на сокет. т.е. работать с ним как с не блокируемым. Почему такие пляски? Подозреваю, что из-за TCP handshake, но утверждать не буду.
0
|
|||||||
| 14.03.2011, 17:21 | |
|
Зачем в фреймворках использовать модели? Зачем использовать динамическую память? Namespace - зачем его использовать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|