1. 程式人生 > >非同步通知讀取檔案操作符的小例子

非同步通知讀取檔案操作符的小例子

轉自:http://www.verydemo.com/demo_c441_i188495.html

#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;

	//讀取並輸出 STDIN_FILENO 上的輸入
	len = read(STDIN_FILENO, &data, MAX_LEN);
	data[len] = 0;
	printf("input available:%s\n", data);
}

main()
{
	int oflags;

	//啟動訊號驅動機制
	signal(SIGIO, input_handler);
	fcntl(STDIN_FILENO, F_SETOWN, getpid());
	oflags = fcntl(STDIN_FILENO, F_GETFL);
	fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);

	//最後進入一個死迴圈,程式什麼都不幹了,只有訊號能激發 input_handler 的執行
	//如果程式中沒有這個死迴圈,會立即執行完畢
	while (1);
}