#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#define MAX_LEN 60
void sigio_handler(int signo)
{
char data[MAX_LEN];
int len;
len = read(STDIN_FILENO, &data, MAX_LEN);
data[len] = '\0';
printf("input data: %s\n", data);
}
int main(void)
{
int flags;
signal(SIGIO, sigio_handler); /* 绑定信号处理函数 */
fcntl(STDIN_FILENO, F_SETOWN, getpid()); /* 指定处理进程为本进程 */
flags = fcntl(STDIN_FILENO, F_GETFL); /* 获取文件flags */
fcntl(STDIN_FILENO, F_SETFL, flags | FASYNC); /* 设置文件标记启用异步通信机制 */
while (1);
return 0;
}
输出结果:
allen@allen-lql ~/Desktop $ ./test
hello everyone!
input data: hello everyone!
I love linux
input data: I love linux