从select的一个死循环谈epoll的ET模式

——作者:lvyilong316

最近写程序遇到一个问题,就是发现select监听标准输出的时候遇到了死循环,具体程序如下程序一。程序的意图是每当用户在控制台有任何输入,就输出”hello world!”。

程序一:

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

#include <sys/select.h>

int

main(int argc, char *argv[])

{

int maxfdp1;

char buf[256];

fd_set rset;

maxfdp1=STDIN_FILENO+1;

for(;;)

{

FD_ZERO(&rset);

FD_SET(STDIN_FILENO,&rset);

select(maxfdp1,&rset,NULL,NULL,NULL);

if(FD_ISSET(STDIN_FILENO,&rset))

{

printf("hello world!\n");

}

}

return 0;

}

运行结果:

从select的一个死循环谈epoll的ET模式,布布扣,bubuko.com

时间: 2024-10-14 00:04:18

从select的一个死循环谈epoll的ET模式的相关文章

关于select的一个死循环

#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/select.h> int main(int argc, char *argv[]){ int maxfd; char buf[256]; fd_set rset; while(1){ FD_ZERO(&rset); FD_SET(STDIN_FILENO,&rset); select(STD

从I/O复用谈epoll为什么高效

上一篇文章中,谈了一些网络编程的基本概念.在现实使用中,用的最多的就是I/O复用了,无非就是select,poll,epoll 很多人提到网络就说epoll,认为epoll效率是最高的.单纯的这么认为,其实有失偏颇.epoll固然高效,可是它是怎么做到高效的,它到底比select或poll优异在哪儿? 我们通过调用流程来简单分析下. 首先以select为例(poll类似),看下其调用过程 1.选择想要处理的套接字,通过接口FD_SET(fd, &set)加入到set中; 2.调用select(m

Angular 1.x下 select 的一个巨大的坑

双向绑定这个特性有时让人又爱又恨 假设控制器 function($scope){ $scope.options = [{name:"alex",id:232,-},{-},{-}-]; $scope.myModel = {name:"alex",id:232}; } <select ng-model="myModel.id"> <option value="">-请选择-</option>

再谈AbstractQueuedSynchronizer:独占模式

关于AbstractQueuedSynchronizer JDK1.5之后引入了并发包java.util.concurrent,大大提高了Java程序的并发性能.关于java.util.concurrent包我总结如下: AbstractQueuedSynchronizer是并发类诸如ReentrantLock.CountDownLatch.Semphore的核心 CAS算法是AbstractQueuedSynchronizer的核心 可以说AbstractQueuedSynchronizer是

浅谈设计模式1-策略模式

对于大多数面向对象的初学者来说,将思维模式从面向过程转变过来是一个比较困难的过程.很多人在用面向对象语言编写程序的时候,依然会感觉自己在用面向过程的思维,笔者分享这篇文章的用意便是希望可以对大家有一些积极的影响. 阅读本文可以是没有接触设计模式,但需要一定的面向对象基础,至少简单理解封装,继承多态. 对于刚开始接触设计模式来说,一开始就说概念性的东西,很少能够理解.所以我们可以先跳过这些,通过一个小的程序场景来进行一个比较直观的认识. 模拟魂斗罗发射子&弹 相信大家小的时候玩过一款叫魂斗罗的游戏

浅谈设计模式:迭代器模式(Iterator Pattern)

热爱生活.享受娱乐.专注技术,欢迎关注QGer,我们一起见证成长! 什么是迭代器模式? 官方解释:to access the elements of an aggregate object sequentially without exposing its underlying implementation. 顺序地访问集合对象的元素并且不暴露它的内部实现 通俗解释:假设给定一个集合对象,定义一个与之相关联的Iterator(迭代器),该迭代器能够访问集合对象的内部元素,通过迭代的方法能够按照顺

一个公网地址部署LVS/DR模式

http://blog.chinaunix.net/uid-7411781-id-3436142.html 网上看了很多关于LVS的文章,在选取2种模式LVS/DR和LVS/NAT,看到很多人的观点都认为DR模型中必须要使用多个公网地址,既DIP,VIP,RIP必须在同一网段内 刚开始我的想法也是如此,所知道的唯一的解决方案就是在LVS集群之前再加一台路由器,用路由器做静态NAT转换,后端的LVS集群则使用DR 模式.不过这样一来就比较耗成本,要有一台路由器专门负责NAT的转换工作,而且压力都转

用select模拟一个socket server

1, 必须在非阻塞模式下,才能实现IO的多路复用,否则一个卡住就都卡住了. 先检测自己,现在没有客户端连进来,所以会卡住. # 用select去模拟socket,实现单线程下的多路复用 import select import socket import queue server = socket.socket() server.bind(('localhost', 9000)) server.listen(1024) server.setblocking(False) # 设置为不阻塞,acc

从一个脚本谈loadrunner的脚本初始化

昨天一个同事问我,如何实现下列代码中 InputStream类is对象的实例化? * LoadRunner Java script. (Build: _build_number_) * * Script Description: * */ import lrapi.lr; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import com.google.common.io.Byte