当前位置: 技术问答>linux和unix
如何实现一个异步I/O程序。
来源: 互联网 发布时间:2015-08-30
本文导语: 我的问题是这样的:一个服务程序是一个Daemon程序,用单进程+异步IO方式接收客户端请求。如何来实现这个程序? I/O复用?信号驱动I/O?还是Posix的异步I/O函数aio_,lio_? 信号驱动I/O在历史上称为异步I/O。但根据Po...
我的问题是这样的:一个服务程序是一个Daemon程序,用单进程+异步IO方式接收客户端请求。如何来实现这个程序?
I/O复用?信号驱动I/O?还是Posix的异步I/O函数aio_,lio_?
信号驱动I/O在历史上称为异步I/O。但根据Posix.1对同步I/O和异步I/O的定义,信号驱动I/O模型为同步I/O模型。
不懂,郁闷阿。大家帮帮忙。
I/O复用?信号驱动I/O?还是Posix的异步I/O函数aio_,lio_?
信号驱动I/O在历史上称为异步I/O。但根据Posix.1对同步I/O和异步I/O的定义,信号驱动I/O模型为同步I/O模型。
不懂,郁闷阿。大家帮帮忙。
|
//下面就是一个多路复用的例子程序
#include
#include
#include
#include
#include
#include
#include
#include
int fdqueue[20];
int qsize=0;
int qtail=0;
int lfd;
void signal_handle();
void signal_handle()
{
int err;
int i;
i=sizeof(err);
getsockopt(lfd,SOL_SOCKET,SO_ERROR,&err,&i);
if(err)
{
printf("socket pending error:%sn",strerror(err));
return;
}
if(qsize==20)return;
for(;fdqueue[qtail]>=0;)qtail=++qtail % 20;
fdqueue[qtail]=accept(lfd,NULL,NULL);
if(fdqueue[qtail]
#include
#include
#include
#include
#include
#include
#include
#include
int fdqueue[20];
int qsize=0;
int qtail=0;
int lfd;
void signal_handle();
void signal_handle()
{
int err;
int i;
i=sizeof(err);
getsockopt(lfd,SOL_SOCKET,SO_ERROR,&err,&i);
if(err)
{
printf("socket pending error:%sn",strerror(err));
return;
}
if(qsize==20)return;
for(;fdqueue[qtail]>=0;)qtail=++qtail % 20;
fdqueue[qtail]=accept(lfd,NULL,NULL);
if(fdqueue[qtail]