Здравствуйте,
Существует программка:Code:
#include <stdlib.h>
#include <signal.h>int i;
void sighandler(){
printf("Catched signal\n");
printf("Reset i value\n");
i=0;
}int main(int argc,char *argv){
struct sigaction sact;
sact.sa_handler=sighandler;
sigaction(SIGINT,&sact,NULL);
for(i=0;;i++){
printf("%d\n",i);
sleep(3);
}
return(0);
}
Она печатает возрастающие числа пока не встретит прерывание (насколько я понимаю - CTRL/C. Правильно? [Вопрос 1])если внутри функции main изменить
sigaction(SIGINT,&sact,NULL);
на
sigaction(SIGQUIT,&sact,NULL);
то, встретив все тот же, CTRL/C - срабатывает выход. Почему?! [Вопрос 2]
Как заставить программу реагировать на CTRL/D? [Вопрос 3]Уверен вы знаете, подскажете?
Заранее спасибо, psh
>Здравствуйте,
>Существует программка:
>
>Code:
>#include <stdlib.h>
>#include <signal.h>
>
>int i;
>
>void sighandler(){
> printf("Catched signal\n");
> printf("Reset i value\n");
> i=0;
>}
>
>int main(int argc,char *argv){
> struct sigaction sact;
> sact.sa_handler=sighandler;
> sigaction(SIGINT,&sact,NULL);
> for(i=0;;i++){
> printf("%d\n",i);
> sleep(3);
> }
> return(0);
>}
>
>
>Она печатает возрастающие числа пока не встретит прерывание (насколько я понимаю -
>CTRL/C. Правильно? [Вопрос 1])Correct.
>если внутри функции main изменить
>sigaction(SIGINT,&sact,NULL);
>на
>sigaction(SIGQUIT,&sact,NULL);
>то, встретив все тот же, CTRL/C - срабатывает выход. Почему?! [Вопрос 2]Срабатывает обработчик по умолчанию для сигнала SIGINT. Он и прерывает обработку программы. Try to add:
signal(SIGINT, SIG_IGN);
>Как заставить программу реагировать на CTRL/D? [Вопрос 3]
Чтением в цикле STDIN + select||poll||epoll||kqueue по желанию.
>>Как заставить программу реагировать на CTRL/D? [Вопрос 3]
>
>Чтением в цикле STDIN + select||poll||epoll||kqueue по желанию.Большое спасибо!
Но, не могли бы вы дать примерчик, а то звучит не до конца понятно...
>>>Как заставить программу реагировать на CTRL/D? [Вопрос 3]
>>
>>Чтением в цикле STDIN + select||poll||epoll||kqueue по желанию.
>
>Большое спасибо!
>Но, не могли бы вы дать примерчик, а то звучит не до
>конца понятно...#include <stdio.h>
int
main(int argc, char *argv[]) {
int ch;while ((ch = getc(stdin)) != EOF)
printf("%c", ch);
return 0;
}Ctrl+D == EOF