![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
cupper |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
А ну это то понятно было изначально. Речи об использовании этой функции не было. Добрался до домашнего компа, и таки понял где я "промахнулся". Именно в нонимании это функции. Вернее в том что SIG_BLOCK/SIG_UNBLOCK это не указание на то что блокировать или не блокировать сигналы, как в сигнал в signal - SIG_IGN. Я не знал что у процесс изначально есть маска сигналов которая именно заблокирована. Я думал что sigprocmask как раз позволяет сделать блокировку этих сигналов. А привело меня к этому наверно неправильное толкование вот этого описания
Еще раз спасибо ![]() PS. sigaction работает на весь процесс и на каждую нить. А основное мое не поние было в том что функции sigwait и ppoll в обработке сигналов различаются как земля и небо. sigwait не позволяет выполниться обработчику (из sigaction). ppoll напротив позволяет. Гип гип ура, мать его. Наконец таки я доделаю свои долбаные пайпы. Прибольшое спасибо вам rsm, мне б к вам в ученики ![]() Это сообщение отредактировал(а) cupper - 22.3.2012, 23:11 |
||||
|
|||||
rsm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 999 Регистрация: 16.3.2005 Репутация: 3 Всего: 62 |
||||
|
||||
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
собрав силы в кулак я вернулся к старому коду. Увидев в примере rsm использование ppoll (когда происходило блокирование при чтении в O_NONBLOCK pipe) я решил что это просто такая хорошая функция которая лучше чем pselect. Решил в этом убедится, достал свой код с select, поменял на
и тут мне стало совсем дурно, потому что операция select заблокировалась на чтении. Но это невозможно !!! Ведь просто операция чтения вставленная строчкой выше select пролетает и возвращает 0. Как ???? Как он блокируется ??? Я рву волосы на голове пытаясь вспомнить как я писал код (а я его писал, и не в одной вариации) что у мня select не блокировался, не блокировался даже на запись если я открывал pipe как O_RDWR | O_NONBLOCK. Но увы, код утерян, и я не могу получить пример в подтверждение своих слов в начале поста. Я ей богу не понимаю почему теперь select блокируется. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Это нормально. Ваша 'операция чтения строчкой выше' вылетела с нулем потому что был выставлен флаг O_NONBLOCK, который означает - 'операции ввода/вывода никогда не блокировать'. Но на select это не распространяется (его на то и сделали, что бы можно было ждать реального поступления данных) |
|||
|
||||
cupper |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
да ну ладно вам
|
||||
|
|||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Но это не значит, что он обратит внимание на флаг O_NONBLOCK. И он не обращает ![]() Так что тут надо читать так :
|
||||
|
|||||
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |