代碼:通過捕捉信號SIGIO將標準輸入打印到標準輸出

#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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章