免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
異步IO信號實例
#include "common.h"


void sig_io(int sig);

int fd;

int main(void)
{
    fd = open("/dev/input/mouse0", O_RDONLY);
    ERROR(fd < 0, "open mouse0", err1);

    //第一步,注冊信號處理函數(shù)
    signal(SIGIO, sig_io);

    //第二步,設(shè)置異步IO的所有權(quán),告訴系統(tǒng)當信號發(fā)生時發(fā)給哪個進程
    fcntl(fd, F_SETOWN, getpid());

    //第三步,將該文件描述符設(shè)置異步模式
    int flag = fcntl(fd, F_GETFL);
    flag |= O_ASYNC;
    fcntl(fd, F_SETFL, flag);

    while(1)
    {
        sleep(1);
    }

    return 0;
err1:
    return -1;
}


void sig_io(int sig)
{
    char buf[1024];
    bzero(buf, 1024);
    read(fd, buf, 1024);
    printf("buf:%s\n", buf);
}


如果對同一個信號加入兩個文件描述符,會出現(xiàn)問題
#include "common.h"


void sig_io(int sig);

int fd;

int main(void)
{
    fd = open("/dev/input/mouse0", O_RDONLY);
    ERROR(fd < 0, "open mouse0", err1);

    //第一步,注冊信號處理函數(shù)
    signal(SIGIO, sig_io);

    //第二步,設(shè)置異步IO的所有權(quán),告訴系統(tǒng)當fd這個設(shè)備發(fā)生信號時發(fā)給哪個進程
    /*
    在同一個進程中,對多個文件描述符設(shè)置了異步IO,當信號發(fā)生時,進程不知道
    是哪個設(shè)備發(fā)來的信號,也就不知道應(yīng)該去讀哪個設(shè)備
    */
    fcntl(fd, F_SETOWN, getpid());
    fcntl(0, F_SETOWN, getpid());

    //第三步,將該文件描述符設(shè)置異步模式
    int flag = fcntl(fd, F_GETFL);
    flag |= O_ASYNC;
    fcntl(fd, F_SETFL, flag);

    flag = fcntl(0, F_GETFL);
    flag |= O_ASYNC;
    fcntl(0, F_SETFL, flag);

    while(1)
    {
        sleep(1);
    }

    return 0;
err1:
    return -1;
}


void sig_io(int sig)
{
    char buf[1024];
    bzero(buf, 1024);
    read(fd, buf, 1024);
    printf("mouse0:%s\n", buf);
   
    bzero(buf, 1024);
    read(0, buf, 1024);
    printf("stdin:%s\n", buf);
}


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux IO 概覽
Linux系統(tǒng)調(diào)用(一)—文件讀寫操作
關(guān)于文件描述符【fd】
fcntl設(shè)置FD
[ 永遠的UNIX > 文件操作 ]
epoll 多進程實現(xiàn)簡單的服務(wù)器端
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服