c语言 detchar ,getchar,perintf。是不是都可以用perintf

作者&投稿:边辰 (若有异议请与网页底部的电邮联系)
请教,UNIX下C语言的问题,制作一个功能追加的getchar相关的函数mydetchar。信号与时间相关的!~

#include
#include
#include
#include
#include
#include

void handler(int sig)
{
if (sig != SIGALRM)
{
printf("Invalid signal %d
", sig);
}
}

int mygetchar(int wait)
{
char ch;
int size, ret, clear;
struct sigaction act, old;
struct itimerval timer;

if (wait <= 0)
return -3;

act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGALRM, &act, &old);


/* set timer */
memset(&timer, 0, sizeof(timer));
timer.it_value.tv_sec = wait;
setitimer(ITIMER_REAL, &timer, NULL);

size = read(STDIN_FILENO, &ch, sizeof(ch));

clear = 1; /* assume we should disable timer after reading */
if (size == 0) /* eof */
{
ret = -1;
}
else if (size == -1 && errno == EINTR) /* timeout */
{
ret = -2;
clear = 0;
}
else if (size < 0) /* other errors */
{
ret = -3;
}
else
{
ret = ch;
}

if (clear)
{
/* disable the running timer */
timer.it_value.tv_sec = 0;
setitimer(ITIMER_REAL, &timer, NULL);
}
sigaction(SIGALRM, &old, NULL); /* restore sig action */

return ret;
}

int main()
{
int ch;
time_t t;

printf("input a char in 3 seconds
");

ch = mygetchar(3);

t = time(NULL);

if (ch < 0)
printf("mygetchar returns %d, at %s
", ch, ctime(&t));
else
printf("get char '%c', at %s
", ch, ctime(&t));

return 0;
}

detchar是什么没见过, getchar是只能从键盘上读入一个, 我认为perintf更高级, getchar可以用perintf