select檢測標準輸入

我們先看一下select的參數列表
在這裏插入圖片描述

  • 參數解釋

參數nfds是需要監視的最⼤大的⽂文件描述符值+1;
rdset,wrset,exset分別對應於需要檢測的可讀⽂文件描述符的集合,可寫⽂文件描述符的集 合及異常⽂文 件描述符的集合;
參數timeout爲結構timeval,⽤用來設置select()的等待時間

  • 關於fd_set的接口

void FD_CLR(int fd, fd_set *set); // ⽤用來清除描述詞組set中相關fd 的位 int >FD_ISSET(int fd, fd_set *set); // ⽤用來測試描述詞組set中相關fd 的位是否爲真
void FD_SET(int fd, fd_set *set); // ⽤用來設置描述詞組set中相關fd的位
void FD_ZERO(fd_set *set); // ⽤用來清除描述詞組set的全部位
好了,有了這幾個接口寫一個select檢測檢測標準輸入的代碼吧

#include<stdio.h>
#include<fcntl.h>
#include<sys/select.h>
int main()
{
    fd_set read_fds;
    FD_ZERO(&read_fds);
    FD_SET(0, &read_fds);
    
    for(;;)
    {
        printf("test1_15");
        fflush(stdout);
        int ret = select(1,&read_fds, NULL, NULL,NULL);
        if(ret < 0)
        {
            perror("select");
            continue;
        }
        if(FD_ISSET(0, &read_fds))
        {
            char buf[1024] = {0};
            read(0, buf, sizeof(buf) -1);
            printf("input : %s ", buf);
        }
        else
        {
            printf("error ! invaild fd\n");
            continue;
        }
        FD_ZERO(&read_fds);
        FD_SET(0, &read_fds);
    }

        return 0;
    
    
}

在這裏插入圖片描述

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