|
0 / 0 / 0
Регистрация: 18.09.2009
Сообщений: 15
|
|
Сигналы. Зачем использовать флаг SA_RESTART?12.03.2011, 15:46. Показов 7351. Ответов 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 - зачем его использовать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный 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
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|