nixp.ru v3.0

18 октября 2017,
среда,
03:19:51 MSK

DevOps с компанией «Флант»
Fatal написал 2 октября 2004 года в 20:29 (494 просмотра) Ведет себя как мужчина; открыл 123 темы в форуме, оставил 484 комментария на сайте.

Подскажите, пожалуйста, как использовать sigvec(int,struct

sigvec *,struct sigvec*);

Я смотрел в manual pages, там ничего не понятно, хоть примерчик

какой-нибудь бы написали.

struct sigvec {

void (*sv_handler)();

int sv_mask;

int sv_flags;

};

void (*sv_handler)(); — понятно что это обработчик.

sv_mask; — это, как я понял, сигналы которые блокируются

(какая разница между блокирование и игнорированием?) процессом.

sv_flags; — ???

И что задают параметры sigvec()?

metal

В man sigvec (linux) написано, что sigvec устарел и надо использовать sigaction. может это и для BSD справедливо? sv_flags используется для установки дополнительных флагов. Существует по историческим причинам — пока обработка сигналов не была стандартизирована posix. Обычно устанавливается в 0. Дополнительные флаги (по памяти) SA_RESTART, SA_INTERUPT.

Сигналы которые игнорируются процессом отправляется на помойку. Сигналы которые блокированы будут доставлены процессу как только процесс разблокирует их доставку.

sigprocmask(SIG_BLOCK,&block_mask,&old_mask);//блокируем сигналы

//пришел сигнал заданный в block_mask и заблокировался

sigprocmask(SIG_UNBLOCK,&old_mask,&block_mask);//разблокируем сигналы

//доставляется сигнал ранее заблокировавшийся

Fatal

У меня в ASPLinux 9 не написано об устареввании этого вызова, там толко сказано, что sigvec это макрос на sigaction…

Спасибо за информацию