非阻塞的c/s,epoll服务器模型
Posted 药剂学徒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非阻塞的c/s,epoll服务器模型相关的知识,希望对你有一定的参考价值。
epoll
#include <stdio.h> #include <stdlib.h> #include <sys/epoll.h> #include <errno.h> #include <unistd.h> #define MAXLINE 10 int main(int argc, char *argv[]) { int efd, i; int pfd[2]; pid_t pid; char buf[MAXLINE], ch = ‘a‘; pipe(pfd); pid = fork(); if (pid == 0) { close(pfd[0]); while (1) { for (i = 0; i < MAXLINE/2; i++) buf[i] = ch; buf[i-1] = ‘\n‘; ch++; for (; i < MAXLINE; i++) buf[i] = ch; buf[i-1] = ‘\n‘; ch++; write(pfd[1], buf, sizeof(buf)); sleep(2); } close(pfd[1]); } else if (pid > 0) { struct epoll_event event; struct epoll_event resevent[10]; int res, len; close(pfd[1]); efd = epoll_create(10); /* ET 边沿触发 ,默认是水平触发 */ event.events = EPOLLIN | EPOLLET; /* event.events = EPOLLIN; */ event.data.fd = pfd[0]; epoll_ctl(efd, EPOLL_CTL_ADD, pfd[0], &event); while (1) { res = epoll_wait(efd, resevent, 10, -1); printf("res %d\n", res); if (resevent[0].data.fd == pfd[0]) { len = read(pfd[0], buf, MAXLINE/2); write(STDOUT_FILENO, buf, len); } } close(pfd[0]); close(efd); } else { perror("fork"); exit(-1); } return 0; }
以上是关于非阻塞的c/s,epoll服务器模型的主要内容,如果未能解决你的问题,请参考以下文章
典型I/O模型——阻塞IO,非阻塞IO,信号驱动IO,异步IO,IO多路转接(select&poll&epoll)
linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)
[杂烩]Windows IOCP与Linux的epoll机制对比
五种系统IO模型以及select/poll/epoll原理与使用教程(附带Reactor介绍)