#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include<signal.h>
#include<unistd.h>
#define MAX_LEN 100
void input_handler(int num)
{
char data[MAX_LEN];
int len;
len = read(STDIN_FILENO,&data,MAX_LEN);
/*读取并输出 STDIN_FILENO 的输入*/
data[len] = 0;
printf("input available: %s\n",data);
}
int main()
{
int oflags;
signal(SIGIO,input_handler);
/*启动信号驱动机制*/
/*为 SIGIO 信号安装input_handler() 作为处理函数*/
fcntl(STDIN_FILENO,F_SETOWN,getpid());
/*设置本进程为 STDIN_FILENO 文件的拥有者*/
oflags = fcntl(STDIN_FILENO,F_GETFL);
fcntl(STDIN_FILENO,F_SETFL,oflags | FASYNC);
while(1);/*保证进程不终止*/
return 0;
}
代码来源:宋宝华 《Linux设备驱动开发详解》