LINUX.ORG.RU

2cvv (прерывается ли stdio сигналами)


0

0

Короче, ты был прав.

Напомню, несколько человек утверждали, что stdio воспроизводит порванные сигналами сисколлы, а у тебя оно вылетало. Я даже тест сюда постил.

Сегодня столкнулся с тем, что низкоуровневый read() сигналом не рвется!

Оказалось, недавно дефолтное поведение signal() было изменено с SVID'ного на BSD'шное! Вот выдержка из

http://www.gnu.org/software/libc/manual/html_mono/libc.html

"In the GNU C Library we use the BSD version by default. To use the SVID version you can either use the function sysv_signal (see below) or use the _XOPEN_SOURCE feature select macro"

★★★★★

Да, собственно, сам код:

/*#define _XOPEN_SOURCE 1 */
#include <stdio.h>
#include <signal.h>

void sig_handler(int sig)
{
   printf("Caught signal %d\n", sig);
   signal(SIGCHLD, sig_handler);
}

int main(void)
{
int c;
   signal(SIGCHLD, sig_handler);
   do{
      c=getchar();
      printf("c=%c ",c);
   }while(c>0);
   return 0;
}


Если раскомментировать верхнюю строчку, то будет вылетать, как и раньше.

Die-Hard ★★★★★
() автор топика

Да, мораль -- у тебя "старая" libc

Die-Hard ★★★★★
() автор топика
Ответ на: комментарий от Die-Hard

И это еще раз доказывает общеизвестный факт - signal() давно уже умер,
да здравствует sigaction() !

Onanim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.