非同步通知讀取檔案操作符的小例子
阿新 • • 發佈:2019-02-12
轉自: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); }