首页 > 试题广场 >

编写fgets函数的一个版本,叫做tfgets,它5秒钟后会

[问答题]
编写fgets函数的一个版本,叫做tfgets,它5秒钟后会超时。tfgets 函数接收和fgets相同 的输人。如果用户在5秒内不键人一个输人行,tfgets 返回NULL。否则,它返回一个指向输入行的指针。

#include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
 #include <signal.h>
 #include <setjmp.h>

sigjmp_buf env;
void tfgets_handler(int sig)
{
signal(SIGALRM, SIG_DFL);
siglongjmp(env, 1);
}

char *tfgets(char *buf, int bufsize, FILE *stream)
{
     static const int TimeLimitSecs = 5;
     signal(SIGALRM, tfgets_handler)
     alarm(TimeLimitSecs);
     int rc = sigsetjmp(env, 1);
     if(rc == 0) return fgets(buf, bufsize, stream);
     else return NULL; //alarm,time out
}
发表于 2019-11-01 21:08:30 回复(0)