当前位置: 首页 > news >正文

b站网站大全下载网站推广服务商

b站网站大全下载,网站推广服务商,网站制作找私人多少钱,软件开发文档编制文章目录 概述摘要正文:介绍ET模式(边缘触发)LT模式(水平触发 默认) 总结 概述 当谈到Linux网络编程中的ET(边缘触发)模式和LT(水平触发)模式时,我们需要理解它们在事件…

文章目录

  • 概述
  • 摘要
  • 正文:
    • 介绍
    • ET模式(边缘触发)
    • LT模式(水平触发 默认)
  • 总结

概述

当谈到Linux网络编程中的ET(边缘触发)模式和LT(水平触发)模式时,我们需要理解它们在事件驱动编程中的作用和区别。下面是一篇详细解释这两种模式的博文,包含代码示例。

摘要

摘要: 在Linux网络编程中,ET(边缘触发)模式和LT(水平触发)模式是两种常用的事件触发方式。本文将详细介绍这两种模式的原理和使用场景,并提供相应的代码示例,帮助读者更好地理解和应用。

正文:

介绍

在事件驱动编程中,事件触发方式决定了何时和如何通知应用程序发生的事件。ET模式和LT模式是两种常见的事件触发方式,主要用于处理非阻塞I/O操作。

EPOLL事件有两种模型:
Edge Triggered (ET) :边缘触发只有数据到来才触发,不管缓存区中是否还有数据。
Level Triggered (LT) :水平触发只要有数据都会触发。

ET模式(边缘触发)

ET(edge-triggered):ET是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知。请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once).

下面是一个使用ET模式的示例代码片段,该代码使用epoll监听套接字并读取数据:

/* server.c */
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <fcntl.h>#define MAXLINE 10
#define SERV_PORT 8080int main(void)
{struct sockaddr_in servaddr, cliaddr;socklen_t cliaddr_len;int listenfd, connfd;char buf[MAXLINE];char str[INET_ADDRSTRLEN];int i, efd, flag;listenfd = socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(SERV_PORT);bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));listen(listenfd, 20);struct epoll_event event;struct epoll_event resevent[10];int res, len;efd = epoll_create(10);/* event.events = EPOLLIN; */event.events = EPOLLIN | EPOLLET;		/* ET 边沿触发 ,默认是水平触发 */printf("Accepting connections ...\n");cliaddr_len = sizeof(cliaddr);connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddr_len);printf("received from %s at PORT %d\n",inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),ntohs(cliaddr.sin_port));flag = fcntl(connfd, F_GETFL);//将其转化为no-blockflag |= O_NONBLOCK;fcntl(connfd, F_SETFL, flag);event.data.fd = connfd;epoll_ctl(efd, EPOLL_CTL_ADD, connfd, &event);while (1) {printf("epoll_wait begin\n");res = epoll_wait(efd, resevent, 10, -1);printf("epoll_wait end res %d\n", res);if (resevent[0].data.fd == connfd) {while ((len = read(connfd, buf, MAXLINE/2)) > 0)write(STDOUT_FILENO, buf, len);}}return 0;
}

LT模式(水平触发 默认)

LT模式在事件发生时会一直通知,直到应用程序将事件处理完毕。它不要求应用程序一直读取或写入数据,可以在每个事件通知中只处理一部分数据。LT模式适用于需要按需处理数据的场景,如批量数据处理、文件传输等。

下面是一个使用LT模式的示例代码片段,该代码使用epoll监听套接字并读取数据:

// 创建epoll实例
int epollfd = epoll_create1(0);// 添加监听套接字到epoll实例
struct epoll_event ev;
ev.events = EPOLLIN; // LT模式
ev.data.fd = sockfd;
epoll_ctl(epollfd, EPOLL_CTL_ADD, sockfd, &ev);// 循环监听事件并处理
while (1) {struct epoll_event events[MAX_EVENTS];int ready = epoll_wait(epollfd, events, MAX_EVENTS, -1);for (int i = 0; i < ready; i++) {if (events[i].events & EPOLLIN) {// 读取数据char buffer[READ_SIZE];int bytesRead = read(events[i].data.fd, buffer, READ_SIZE);// 处理数据// ...}}
}

总结

ET模式和LT模式是Linux网络编程中常用的事件触发方式。ET模式要求应用程序在读取或写入数据时必须一直进行操作,适用于需要及时处理全部数据的场景。LT模式允许应用程序按需处理数据,适用于需要按需处理数据的场景。理解并正确应用这两种模式,对于开发高效、可靠的网络应用程序至关重要。

通过以上详细的解释和代码示例,我们希望读者能够更好地理解ET模式和LT模式在Linux网络编程中的作用和区别。这两种模式的选择取决于具体的应用需求,开发者可以根据实际情况来决定使用哪种模式。

希望本文对您有所帮助,如果还有任何问题,请随时提问!

http://www.dinnco.com/news/16340.html

相关文章:

  • 手机上可以做网站吗国际最新新闻
  • 怎么做贷款网站互联网搜索引擎有哪些
  • 网站设计高端网络优化大师下载
  • 陕西最新人事任免seo服务内容
  • 常州网站建设方案外包网站发布平台
  • 上海爆发大规模抗议seo外链工具下载
  • 区政府网站群建设方案seo优化资源
  • 网站建设方案实例深圳推广不动产可视化查询
  • 多语种网站后台seo网站优化服务合同
  • 桂林象鼻山离哪个高铁站近软文街
  • 天津网站建设业务西安网站建设网络推广
  • webmysql网站开发实例百度推广代理公司广州
  • 做调查的网站广东东莞今日最新消息
  • 宜昌网站制作公司油烟机seo关键词
  • 做网站 发现对方传销优帮云首页推荐
  • ps最好用的素材网站软件开发培训中心
  • 如何做房产网站社交网络的推广方法有哪些
  • 聪明的上海网站网络营销是什么专业类别
  • 中国建设银行的网站.抖音黑科技引流推广神器
  • 移动ui设计 网站桂平seo关键词优化
  • 制作公司网页需求表seo教程网站优化
  • 阿里巴巴批发网站上面怎么做微商电商培训视频教程
  • 永久免费的crm软件系统seo信息是什么
  • 校园网站建设与管理问题分析深度搜索
  • 做网站有哪些按钮搜索引擎营销的优缺点及案例
  • 软件上传到那个网站做宣传情感网站seo
  • 上海网站设计kinglink灰色行业关键词优化
  • 苏州做网站公司排名亚马逊关键词工具哪个最准
  • 中天建设集团网站郑州网站seo技术
  • 如何开通微信商城seo百度排名优化