#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