c/c++ select与epoll 监听文件(以stdin为例)

// Server side implementation of UDP client-server model
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/epoll.h>
#include <thread>
#include <iostream>
void epoll_read_stdin(){
    int file_fd = 0;//stdin 的fd是0
    int epoll_fd = epoll_create(1024);
    struct epoll_event event;
    event.events = EPOLLIN;
    event.data.fd = file_fd;
    epoll_ctl(epoll_fd,EPOLL_CTL_ADD,file_fd,&event);
    struct epoll_event event_buf[16];
    char read_buf[1024];
    while (true){
        int cnt = epoll_wait(epoll_fd,event_buf,16,-1);
        if (cnt<0){
            printf("epoll error\n");
            return ;
        }else{
            for(int i=0;i<cnt;++i){
                int n = read(event_buf[i].data.fd,read_buf,1024);
                read_buf[n]=0;
                printf("epoll recieve from stdin: %s\n",read_buf);
            }
        }
    }
}

void select_read_stdin(){
    int file_fd =0;//stdin 的fd是0
    fd_set read_set;
    char read_buf[1024];
    while (true){
        memset(&read_set,0,sizeof(read_set));
        FD_SET(file_fd,&read_set);
        int ret = select(file_fd+1,&read_set,NULL,NULL,NULL);
        if(ret<0){
            printf("ret<0 \n");
            return ;
        }else{
            if (FD_ISSET(file_fd,&read_set)){
                int n = read(file_fd,read_buf,1024);//stdin 的fd是0
                read_buf[n]=0;
                printf("select recieve from stdin: %s\n",read_buf);
            }
        }
    }
}

int main(){
    //select_read_stdin();
    epoll_read_stdin();
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务