具有超时功能的API
常见的低速系统调用包括
➢ 读写(read、write)管道、终端设备、网络
➢ 打开(open)终端设备等
➢ pause、wait函数
➢ 某些ioctl操作
➢ 某些进程间通信函数
➢ 注意:磁盘I/O并不属于这类低速系统调用。
因为只要不是硬件错误,I/O操作总会返回。
带有超时功能的read函数
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
static void sig_alrm(int signo)
{
printf("1111");
return ;
}
int main()
{
int n;
char line[1024];
if(signal(SIGALRM,sig_alrm)==SIG_ERR){
printf("signal error");
}
alarm(5);
if((n=read(STDIN_FILENO,line,1024))<0)
printf("read error");
alarm(0);
write(STDOUT_FILENO,line,n);
// for(;;) pause();
exit(0);
}
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
#include<setjmp.h>
static jmp_buf env_alrm;
static void sig_alrm(int signo)
{
longjmp(env_alrm,1);
}
int main()
{
int n;
char line[1024];
if(signal(SIGALRM,sig_alrm)==SIG_ERR){
printf("signal error");
}
if(setjmp(env_alrm)!=0)
printf("read time out");
alarm(5);
if((n=read(STDIN_FILENO,line,1024))<0)
printf("read error");
alarm(0);
write(STDOUT_FILENO,line,n);
// for(;;) pause();
exit(0);
}