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

epoll服务器创建

驱动

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/io.h>
#include <linux/device.h>
#include <linux/uaccess.h>
#include <linux/poll.h>
unsigned int major;
char kbuf[128]={0};
unsigned int *vir_rcc;
//定义等待队头
wait_queue_head_t wq_head;
//定义数据是否准备好的标志变量
int condition=0;
struct class *cls;
struct device *dev;
int i;int mycdev_open(struct inode *inode, struct file *file)
{//   int a=inode->i_rdev;// file->private_data=(void *)MINOR(a);printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;
}
ssize_t mycdev_read(struct file *file, char __user *ubuf, size_t size, loff_t *lof)
{//将进程切换为休眠态wait_event_interruptible(wq_head,condition); long ret;ret=copy_to_user(ubuf,kbuf,size);if(ret){printk("copy_to_user filed\n");return -EIO;}condition=0;return 0;
}
ssize_t mycdev_write(struct file *file, const char __user *ubuf, size_t size, loff_t *lof)
{long ret;ret=copy_from_user(kbuf,ubuf,size);if(ret){printk("copy_from_user filed\n");return -EIO;}condition=1;//唤醒休眠的进程wake_up_interruptible(&wq_head);//判断用户输入的数据,进行不同的硬件逻辑操作return 0;
}//封装poll方法
__poll_t mycdev_poll(struct file *file,struct poll_table_struct *wait)
{__poll_t mask=0;poll_wait(file,&wq_head,wait);if(condition){mask=POLLIN;}return mask;
}
int mycdev_close (struct inode *inode, struct file *file)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;}
struct file_operations fops={.open=mycdev_open,.release=mycdev_close,.read=mycdev_read,.write=mycdev_write,.poll=mycdev_poll,//   .unlocked_ioctl=mycdev_ioctl,
};
static int __init mycdev_init(void)
{//初始化等待队列头init_waitqueue_head(&wq_head);major=register_chrdev(0,"myled",&fops);if(major<0){printk("注册字符设备驱动失败");return major;}printk("注册字符设备驱动成功major=%d\n",major);//映射led1物理地址//向上提交目录cls = class_create(THIS_MODULE,"myled");if(IS_ERR(cls)){printk("向上提交目录失败\n");return -PTR_ERR(cls);}printk("向上提交目录信息成功\n");//向上提交设备节点信息for (i=0;i<3;i++){dev=device_create(cls, NULL, MKDEV(major,i),NULL,"myled%d",i);if(IS_ERR(dev)){printk("向上提交设备节点信息失败\n");return -PTR_ERR(dev);}}printk("向上提交设备节点成功\n");return 0;
}
static void __exit mycdev_exit(void)
{for(i=0;i<3;i++){device_destroy(cls,MKDEV(major,i));}class_destroy(cls);unregister_chrdev(major,"myled");}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");

应用程序

#include<stdio.h>
#include<sqlite3.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<sys/select.h>
#include<netinet/in.h>
#include<unistd.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<sys/epoll.h>
#define PROT 6666
#define IP "192.168.250.100"
int main(int argc, char const *argv[])
{int fds,newfds;//创建流失套接字fds = socket(AF_INET,SOCK_STREAM,0);{if(fds<0){perror("socket");printf("__%d__\n",__LINE__);return -1;}}//设置允许端口快速复用int reuse = 1;if(setsockopt(fds, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) <0){perror("setsockopt");return -1;}printf("setsockopt success __%d__\n",__LINE__);//定义服务器信息struct sockaddr_in sin;struct sockaddr_in cin;socklen_t clen = sizeof(cin);sin.sin_family = AF_INET;sin.sin_port = htons(PROT);sin.sin_addr.s_addr = inet_addr(IP);//绑定服务器信息if(bind(fds,(struct sockaddr*)&sin,sizeof(sin))<0){perror("bind");printf("__%d__\n",__LINE__);return -1;}//创建监听队列if(listen(fds,128)<0){perror("listen");printf("__%d__",__LINE__);return -1;}int epfd;struct epoll_event event;struct epoll_event events[10];char buf[128]={0};epfd=epoll_create(1);if(epfd<0){printf("epoll_create filed\n");exit(-1);}//读事件event.events=EPOLLIN;event.data.fd=fds;if(epoll_ctl(epfd,EPOLL_CTL_ADD,fds,&event)<0){printf("epoll_ctl add filed\n");   }while(1){int ret=epoll_wait(epfd,events,10,-1);if(ret<0){printf("epoll_wait filed\n");exit(-1);}int i;for(i=0;i<ret;i++){if(events[i].data.fd==fds){printf("1\n");newfds=accept(fds,(struct sockaddr *)&cin,&clen);printf("2\n");if(newfds<0){perror("accept");exit(-1);}printf("---[%s:%d]连接成功-\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));event.events=EPOLLIN;event.data.fd=newfds;if(epoll_ctl(epfd,EPOLL_CTL_ADD,newfds,&event)<0){printf("epoll_ctl add filed\n");   }}}}return 0;
}

相关文章:

epoll服务器创建

驱动 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #include <linux/uaccess.h> #include <linux/poll.h> unsigned int major; char kbuf[128]{0}…...

jdk11环境 提示“因为 accessExternalDTD 属性设置的限制导致不允许 ‘http‘ 访问“bug

在运行mybatis源码的时候&#xff0c;提示一下错误&#xff1a; Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.apache.ibatis.builder.BuilderException: Error creating docum…...

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …...

一个 SpringBoot 项目能处理多少请求

首先&#xff0c;这个问题有坑&#xff0c;因为 spring boot 不处理请求&#xff0c;只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。 使用 spring boot 进行开发相对于之前写配置文…...

Python中的r字符串前缀及其用法详解

Python中的r字符串前缀及其用法详解 1. 介绍 1.1 什么是r字符串前缀 在Python中&#xff0c;r字符串前缀是一种特殊的字符串前缀&#xff0c;用于表示原始字符串。当一个字符串以r前缀开始时&#xff0c;它将被视为原始字符串&#xff0c;其中的转义字符将被忽略。 1.2 r字…...

LabVIEW实现三相异步电机磁通模型

LabVIEW实现三相异步电机磁通模型 三相异步电动机由于经济和出色的机电坚固性而广泛用于工业化应用。这台机器的设计和驱动非常简单&#xff0c;但在控制扭矩和速度方面&#xff0c;它隐藏了相当大的功能复杂性。通过数学建模&#xff0c;可以理解机器动力学。 基于微分方程的…...

读书会-《影响力》

《影响力》这本书的作者罗伯特西奥迪尼时全球知名说服力研究权威。因其在影响力研究领域的开创性&#xff0c;人们将其称为“影响力研究领域的本杰明富兰克林”。这本书从人们的心理状态&#xff0c;进行了很多实验研究&#xff0c;总结出了7大规律。如果从事营销&#xff0c;需…...

141. 环形链表

简单 1.9K 相关企业 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链…...

学习笔记|大模型优质Prompt开发与应用课(二)|第一节:大模型应用密码—Prompt的一千种打开方式

文章目录 第一节:大模型应用密码—Prompt的一千种打开方式01你可能听过一个小故事1910华盛顿纺织厂罢工事件 02 小问题:哪些场景会被提效类目一︰减少重复性工作的成本&#xff08;降本)例如∶做策划初稿、写JD、润色文案prompt生成结果prompt生成结果prompt生成结果promptprom…...

QT chart进行画图

说明 QT Chart 是一个用于在 Qt 应用程序中绘制图表的开源库。它提供了多种类型的图表,如线图、柱状图、饼图等,可以用于可视化数据和统计信息。QT Chart 是一个基于 Qt 绘图框架的扩展,可以轻松集成到现有的 Qt 应用程序中。 使用 QT Chart,你可以通过简单的代码来创建和…...

Web3将自己写在合约中的代币添加到MetaMask中管理

上文 Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约 带着大家在智能合约中创建了一个自己的代币系统 我们可以在MetaMask中去导入 ganache环境下模拟出来的第一和第二个账号 我们这里 可以看到他们的 ETH 但看不到自己的代币符号 没关系 我们点击这下面的…...

【微信小程序】显示自带的弹窗,包括加载中,成功,错误,提示,警告

在微信小程序中&#xff0c;可以使用以下方法来显示自带的弹窗&#xff1a; 显示加载中的弹窗&#xff1a; wx.showLoading({title: 加载中,mask: true });显示成功的弹窗&#xff1a; wx.showToast({title: 成功,icon: success,duration: 2000 });显示错误的弹窗&#xff1…...

vue-element-plus-admin框架的tag上下文切换bug

问题 首先贴上该框架的链接&#xff1a;https://github.com/kailong321200875/vue-element-plus-admin 在对路由进行部分修改后&#xff0c;网站多次切换tag时&#xff0c;控制台会出现报错&#xff1a;Cannot read properties of undefined (reading offsetLeft)。 我在框架…...

vue中,父子组件传递参数 props 实现方式

通过 Prop 向子组件传递数据 001&#xff1a;父组件》子组件通信 <template><div><h1>这里是父元素</h1>//******<childComponent :detailMes"detailMes"/></div> </template><script>import childComponent from…...

Unity如何快速接入iOS和GooglePlay的成就排行榜等GameCenter功能

一般在游戏开发中&#xff0c;经常有成就排行榜的需求&#xff0c;按照我们的理解&#xff0c;通常是要自己导入谷歌的sdk&#xff0c;或者苹果的sdk&#xff0c;然后封装后通过桥接来调用。 不用这么复杂&#xff0c;本鱼蛋(egostudio 防爬)告诉大家一个方法&#xff0c;其实…...

Unity下如何实现低延迟的全景RTMP|RTSP流渲染

技术背景 Unity3D可以用于创建各种类型的的应用程序&#xff0c;包括虚拟现实、培训模拟器等。以下是一些可以使用Unity3D全景播放的场景&#xff1a; 虚拟现实体验&#xff1a;全景视频可以用来创建逼真的虚拟环境&#xff0c;使用户能够感受到身临其境的感觉&#xff1b;培…...

STM32 USB使用记录:HID类设备(后篇)

文章目录 目的基础说明项目构建与代码调整接收发送代码与测试示例链接报告描述符总结 目的 接上篇&#xff1a; 《STM32 USB使用记录&#xff1a;HID类设备&#xff08;前篇&#xff09;》 USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文…...

C# 快速写入日志 不卡线程 生产者 消费者模式

有这样一种场景需求&#xff0c;就是某个方法&#xff0c;对耗时要求很高&#xff0c;但是又要记录日志到数据库便于分析&#xff0c;由于访问数据库基本都要几十毫秒&#xff0c;可在方法里写入BlockingCollection&#xff0c;由另外的线程写入数据库。 可以看到&#xff0c;在…...

Pandas将对角线元素设为1

Pandas将对角线元素设为1 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 入门之pandas的使用 提示&#xff1a;np.fill_diagonal(df.values, 1)的用法 Pandas将对角线元素设为1 Pandas将对角线元素设为…...

WPF实战学习笔记28-登录界面

添加登录界面UI 添加文件loginview.xaml。注意本界面使用的是md内的图标。没有登录界面的图片 <UserControlx:Class"Mytodo.Views.LoginView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsof…...

01背包

动态规划解题步骤: 动态规划问题&#xff0c;一般从三个步骤进行考虑。 步骤一&#xff1a;集合及集合的状态。 所谓的集合&#xff0c;就是一些方案的集合。 用 g[i][j] 表示从前 i 种物品中进行选择&#xff0c;且总体积不大于 j 的各个选法获得的价值的集合。注意&#…...

064、故障处理之OMM_TiDB

oom 内存溢出&#xff0c;内存泄漏&#xff0c;相当于TiDB不能用了 TiDB Server OOM对业务的影响 TiDB Server上的业务SQL会失败业务响应时间升高前端体验变差 诊断方法 客户端应用 ERROR 2013(HY000): Lost connection to MySQL Server during query日志 dmesg -T | gr…...

网络设备中的配置文件管理

建立强大网络的第一步是为灾难和网络中断做好准备&#xff0c;许多企业在中断期间遭受损失&#xff0c;因为他们缺乏备份计划并且配置管理不达标&#xff0c;使用配置文件管理工具进行适当的配置文件管理不仅有助于处理网络中断&#xff0c;还有助于优化网络性能。 使用配置文…...

HCIP BGP综合实验

题目 1、AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24该地址不能在任何协议中宣告&#xff1b; 2、AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以互相通讯&#xff1b; 3、AS间的骨干链路I…...

【mysql学习篇】Order by与Group by优化以及排序算法详解

一、Order by与Group by优化 Case1&#xff1a; 分析&#xff1a; 利用最左前缀法则&#xff1a;中间字段不能断&#xff0c;因此查询用到了name索引&#xff0c;从key_len74也能看出&#xff0c;age索引列用在排序过程中&#xff0c;因为Extra字段里没有using filesort 注意…...

【业务功能篇60】Springboot + Spring Security 权限管理 【终篇】

4.4.7 权限校验扩展 4.4.7.1 PreAuthorize注解中的其他方法 hasAuthority&#xff1a;检查调用者是否具有指定的权限&#xff1b; RequestMapping("/hello")PreAuthorize("hasAuthority(system:user:list)")public String hello(){return "hello Sp…...

文章详情页 - 评论功能的实现

目录 1. 准备工作 1.1 创建评论表 1.2 创建评论实体类 1.3 创建 mapper 层评论接口和对应的 xml 实现 1.4 准备评论的 service 层 1.5 准备评论的 controller 层 2. 总的初始化详情页 2.1 加载评论列表 2.1.1 实现前端代码 2.1.2 实现后端代码 2.2 查询当前登录用户的…...

使用贝叶斯滤波器通过运动模型和嘈杂的墙壁传感器定位机器人研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Day 69-70:矩阵分解

代码&#xff1a; package dl;import java.io.*; import java.util.Random;/** Matrix factorization for recommender systems.*/public class MatrixFactorization {/*** Used to generate random numbers.*/Random rand new Random();/*** Number of users.*/int numUsers…...

数据结构:树的存储结构

学习树之前&#xff0c;我们已经了解了二叉树的顺序存储和链式存储&#xff0c;哪么我们如何来存储普通型的树结构的数据&#xff1f;如下图1&#xff1a; 如图1所示&#xff0c;这是一颗普通的树&#xff0c;我们要如何来存储呢&#xff1f;通常&#xff0c;存储这种树结构的数…...

做三方网站多少钱/微博推广平台

本文实例讲述了php实现微信模拟登陆、获取用户列表及群发消息功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;header(Content-Type: text/html; charsetUTF-8);/*调用方式简单说明&#xff1a;$arr array(account > 公众平台帐号,password > 密码);$w new…...

做网站的公司上海/竞价运营是做什么的

研发过程中&#xff0c;文档很重要&#xff0c;但更重要的可能是「惯性思维」 开发到底要不要写文档&#xff08;注释&#xff09;&#xff0c;要写多少文档&#xff0c;要怎么写文档&#xff0c;想必在大家工作的各个阶段都会有不同的体会&#xff0c;不同人也会有不同的意见。…...

网站设计与制作简单吗/百度知道提问首页

JSP方面1、 JSP四种范围是什么&#xff1f;区别是什么&#xff1f;Page:指单单一页jsp page的范围&#xff1b;Request:的范围只在一jsp页发出请求到另一页之间&#xff0c;随后这个属性失效&#xff1b;Session:范围是用户和服务器连接的那段时间&#xff0c;用户与服务器断开…...

网站空间名词解释/网易最新消息新闻

伪原创是目前最鲜为人知的文章处理方式&#xff0c;做seo网站优化的也许知道&#xff0c;目前传统的文章伪原创方式的作用已经是越来越低了&#xff0c;所以我们文章在做伪原创时必须要提高伪原创文章的原创度&#xff0c;这样才能让搜索引擎更加信任我们&#xff0c;给我们的文…...

ps如何做游戏模板下载网站/网络营销策划书范文模板

以前也在ubuntu上面安装过搜狗输入法&#xff0c;没有记录详细的安装步骤&#xff0c;这次详细的记录下。 1.在系统设置里安装中文语言支持 2.安装fcitx&#xff0c;并设置input method sudo apt-get install fcitx 3.下载搜狗输入法安装包linux版本 网站 安装完以后要重启电…...

贵州省城乡和建设厅网站/百度网页搜索

微软手机的信号显示...