程序(1)
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<signal.h>
void SignHandler(int iSignNum)
{
printf("\nCapture signal number is:%d\n",iSignNum);
}
int main(void)
{
int iRet;
char szBuf[20];
struct sigaction act;
act.sa_sigaction=SignHandler;
act.sa_flags=SA_SIGINFO;
sigemptyset(&act.sa_mask);
sigaction(SIGINT,&act,NULL);
do
{
iRet=read(STDIN_FILENO,szBuf,sizeof(szBuf)-1);
if(iRet<0)
{
perror("read failed!\n");
break;
}
szBuf[iRet]='\0';
printf("%s",szBuf);
}while(strcmp(szBuf,"quit\n")!=0);
return 0;
}
函数的执行结果是:
haheha
haheha
^C
Capture signal number is:2
read failed!
: Interrupted system call
我们看到Ctrl+C后,main函数会读出错,进程会中断
程序(2)
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
void hello(int a)
{
printf("The input number is %d\n",a);
}
int main(void)
{
int iRet;
char buf[20];
signal(SIGINT,hello);
do
{
iRet=read(STDIN_FILENO,buf,sizeof(buf)-1);
if(iRet<0)
{
printf("read fialed!\n");
break;
}
buf[iRet]='\0';
printf("%s",buf);
}while(strcmp(buf,"quit\n")!=0);
return 0;
}
程序的运行结果如下:
wangguolong
wangguolong
shishishi
shishishi
jjjj
jjjj
^CThe input number is 2
wangguo
wangguo
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
^CThe input number is 2
wnagg
wnagg
^\Quit (core dumped)
我们看到,在程序(2)中signal函数并没有触发 读出错中断
请高手解释下