Linux
universe_ant
这个作者很懒,什么都没留下…
展开
-
I/O复用——poll系统调用
poll系统调用 poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪的文件描述符。 在终端输入man poll可查看poll函数的原型:#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout); 1)fds参数是一个pollfd结构类型的数组,它指定所有我们感兴原创 2016-02-25 11:36:01 · 947 阅读 · 0 评论 -
信号集
信号集信号集函数 Linux使用数据结构sigset_t来表示一组信号。其定义如下:#include <bits/sigset.h>/* A `sigset_t' has a bit for each signal. */# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))typedef struct{ u原创 2016-03-01 11:12:54 · 1010 阅读 · 0 评论 -
信号函数
信号函数signal系统调用 要为一个信号设置处理函数,可以使用下面的signal系统调用:#include <signal.h>typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler); signum参数指出要捕获的信号类型。handler参数是sighandler_t类型原创 2016-02-29 22:05:39 · 989 阅读 · 0 评论 -
Linux信号概述
Linux信号概述 信号是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。发送信号 Linux下,一个进程给其他进程发送信号的API是kill函数。其定义如下:#include <signal.h>int kill(pid_t pid, int sig); 该函数把信号sig发送给目标进程;目标进程由pid参数指定,其可能的取值及含义如下表所示:pid参数原创 2016-02-28 20:54:56 · 731 阅读 · 0 评论 -
I/O复用
I/O复用 I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。通常,网络程序在下列情况下需要使用I/O复用技术:客户端程序要同时处理多个socket。客户端程序要同时处理用户输入和网络连接。TCP服务器要同时处理监听socket和连接socket。这是I/O复用使用最多的场合。服务器要同时处理TCP请求和UDP请求服务器要同时监听多个端口,或者处理多种服务。 需原创 2016-02-24 20:53:38 · 394 阅读 · 0 评论 -
I/O复用的高级应用三:同时处理TCP和UDP服务
I/O复用的高级应用三:同时处理TCP和UDP服务 在实际应用中,有不少服务器程序能同时监听多个端口,比如超级服务inetd和android的调试服务adbd。 从bind系统调用的参数来看,一个socket只能与一个socket地址绑定,即一个socket只能用来监听一个端口。因此,服务器如果要同时监听多个端口,就必须创建多个socket,并将它们分别绑定到各个端口上。这样一来,服务器程序就需原创 2016-02-26 23:37:48 · 1243 阅读 · 0 评论 -
I/O复用——epoll系列系统调用
epoll系列系统调用内核事件表 epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像select和poll那样每次调用都是重复传入描述符或者时间集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件原创 2016-02-25 17:42:09 · 745 阅读 · 0 评论 -
I/O复用的高级应用二:聊天室程序
I/O复用的高级应用二:聊天室程序 像ssh这样的登录服务通常要同时处理网络连接和用户输入,这也可以使用I/O复用来实现。本节我们以poll为例实现一个简单的聊天室程序,以阐述如何使用I/O复用技术来同时处理网络连接和用户输入。该聊天室程序能让所有用户同时在线群聊,它分为客户端和服务器两个部分。其中客户端程序有两个功能:一是从标准输入终端读入用户数据,并将用户数据发至服务器;二是往标准输出终端打印原创 2016-02-26 22:57:50 · 1065 阅读 · 0 评论 -
I/O复用的高级应用一:非阻塞connect
I/O复用的高级应用一:非阻塞connect 在终端输入man connect,展示的内容有如下一段:EINPROGRESS The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for comple原创 2016-02-26 20:53:14 · 732 阅读 · 0 评论 -
三组I/O复用函数的比较
三组I/O复用函数的比较 之前讨论了select、poll和epoll三组I/O复用系统调用,这3组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返回值是就绪的文件描述符的数量。返回0表示没有事件发生。现在我们从事件集、最大支持文件描述符数、工作模式和具体实现等四个方面进一步比较它们的异同,以明确在实际应用中应该选择原创 2016-02-26 11:57:48 · 664 阅读 · 0 评论 -
I/O复用——select系统调用
select系统调用 select系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常的事件。select API 在终端上输入man select,可以查看select系统调用的原型:/* According to POSIX.1-2001 */#include <sys/select.h>/* According to earlier standards */原创 2016-02-24 23:22:48 · 945 阅读 · 0 评论 -
Reactor & Proactor
阅读《Hadoop技术内幕:深入解析YARN架构设计与实现原理》,其中描述到Hadoop RPC采用了基于Reactor设计模式的事件驱动I/O模型,用以增强RPC Server端的扩展性和并发处理能力,所以对事件处理模式进行了学习。服务器程序通常需要处理三类事情:I/O事件、信号及定时事件。其中两种高效的事件处理模式分别为:Reactor和Proactor。随着网络设计模式的兴起,Rea原创 2016-08-13 17:10:35 · 523 阅读 · 0 评论