Linux:基于libevent读写管道代码
基于libevent读写管道代码:
读端:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <event2/event.h>
#include <event2/bufferevent.h>
#include <event2/listener.h>
#include <fcntl.h>
void read_cb(evutil_socket_t fd, short what, void* arg) {
//把管道中的数据读出到buf中,然后打印出来
char buf[1024] = {0};
int len = read(fd,buf,sizeof(buf));
printf(“data len= %d , buf= %s\n”,len,buf);
printf(“read event: %s\n”, what & EV_READ ? “YES” : “NO”);
}
int main(int argc, const char* argv[])
{
//先删除同名管道,再创建管道
unlink(“myfifo”);
mkfifo(“myfifo”, 0664);
int fd = open("myfifo", O_RDONLY | O_NONBLOCK);
if(-1 == fd) {perror("create fifo pipe fail");exit(1);
}//创建事件框架,事件的根结点
struct event_base* base = NULL;
base = event_base_new();//创建事件
struct event* ev = NULL;
ev = event_new(base, fd, EV_READ | EV_PERSIST, read_cb, NULL);//往事件框架中添加事件ev
event_add(ev,NULL);//分发事件
event_base_dispatch(base);//释放资源
event_free(ev);
event_base_free(base);
close(fd);
return 0;
}
写端:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <event2/event.h>
#include <event2/bufferevent.h>
#include <event2/listener.h>
#include <fcntl.h>
void write_cb(evutil_socket_t fd, short what, void* arg) {
//把数据写到buf中,然后写到管道中,然后打印出来
char buf[1023] = {0};
static int num = 0;
sprintf(buf, “hello world == %d \n”, num++);
write(fd, buf, strlen(buf)+1);
}
int main(int argc, const char* argv[])
{
//管道已经在read_fifo.c中创建管道
int fd = open("myfifo", O_WRONLY | O_NONBLOCK);
if(-1 == fd) {perror("create fifo pipe fail");exit(1);
}//创建事件框架,事件的根结点
struct event_base* base = NULL;
base = event_base_new();//创建事件
struct event* ev = NULL;
ev = event_new(base, fd, EV_WRITE | EV_PERSIST, write_cb, NULL);//往事件框架中添加事件ev
event_add(ev,NULL);//分发事件
event_base_dispatch(base);//释放资源
event_free(ev);
event_base_free(base);
close(fd);
return 0;
}
结果:
先打开读端,再打开写端,然后看到读端的代码如下:

相关文章:
Linux:基于libevent读写管道代码
基于libevent读写管道代码: 读端: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <event2/event.h> #include…...
2022年中职网络安全逆向题目整理合集
中职网络安全逆向题目整理合集逆向分析:PE01.exe算法破解:flag0072算法破解:flag0073算法破解:CrackMe.exe远程代码执行渗透测试天津逆向re1 re2逆向分析:PE01.exe FTPServer20220509(关闭链接) FTP用户名:PE01密码…...
Tencent OS下逻辑卷(LVM)增加硬盘扩容
上一篇文章写了逻辑卷创建以及使用剩余空间为已经创建的逻辑卷扩容。 本篇是针对卷组空间已经用尽时的扩容方法。那就是增加硬盘。 首先我们为虚拟机增加硬盘/dev/sdd 使用fdisk为/dev/sdd分区,方法在上一篇文章已经描述,在此不再赘述。 新增的硬盘使用如下命令添加到卷组…...
【Java】Spring的创建和使用
Spring的创建和使用 Spring就是一个包含众多工具方法的IOC容器。既然是容器,那么就具备两个最主要的功能: 将对象存储到容器中从容器中将对象取出来 在Java语言当中对象也叫作Bean。 1. 创建Spring项目 创建一个普通maven项目添加Spring框架支持(spri…...
【HTML】HTML 表单 ④ ( textarea 文本域控件 | select 下拉列表控件 )
文章目录一、textarea 文本域控件二、select 下拉列表控件一、textarea 文本域控件 textarea 文本域 控件 是 多行文本输入框 , 标签语法格式如下 : <textarea cols"每行文字字符数" rows"文本行数">多行文本内容 </textarea>实际开发中 并不…...
MySQL 操作 JSON 数据类型
MySQL 从 v5.7.8 开始支持 JSON 数据类型。 JSON 数据类型和传统数据类型的操作还是有很大的差别,需要单独学习掌握。好在 JSON 数据类型的学习成本不算太高,只是在 SQL 语句中扩展了 JSON 函数,操作 JSON 数据类型主要是对函数的学习。 新…...
关于vue3生命周期的使用、了解以及用途(详细版)
生命周期目录前言组合式写法没有 beforeCreate / created 生命周期,并且组合式写生命周期用哪个先引哪个beforeCreatecreatedbeforeMount/onBeforeMountmounted/onMountedbeforeUpdate/onBeforeUpdateupdated/onUpdatedbeforeUnmount/onBeforeUnmountunmounted/onUn…...
2月,真的不要跳槽。
新年已经过去,马上就到金三银四跳槽季了,一些不满现状,被外界的“高薪”“好福利”吸引的人,一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必…...
Vulnhub靶场----4、DC-4
文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-4下载地址:https://download.vulnhub.com/dc/DC-4.zip kali:192.168.144.148 DC-4:192.168.144.152 二、渗透流程 端口扫描:nmap -T5 -p- -sV -sT -A 192.168.144.1…...
51单片机学习笔记_12 LCD1602 原理及其模块化代码
LCD1602 liquid crystal display 液晶显示屏,一种字符型液晶显示模块,可以显示 16*2 个字符,每个字符是 5*7 点阵。 P0 P2 会和数码管、LED 一定程度上冲突。 地。 Vcc。 调对比度的。 RS:数据指令端。1代表 DB 是数据&#x…...
科技 “新贵”ChatGPT 缘何 “昙花一现” ,仅低代码风靡至今
恍惚之间,ChatGPT红遍全网,元宇宙沉入深海…… 在科技圈,见证了太多“昙花一现”,“新贵” ChatGPT 的爆火几乎复制了元宇宙的路径,它会步元宇宙的后尘,成为下一个沉入深海的工具吗? 不可否认的…...
redis基本入门| 怎么安装redis?什么的是redis?怎么使用?
目录 一、Redis下载与安装 二、基本概念 1.什么是Redis? 2.Redis端口多少? 3.Redis是单线程还是多线程? 4.Redis为什么单线程还这么快? 三、Redis的基本操作 四、Redis的五个基本类型 1.Redis-key 2.字符串 string 3.列表 list …...
kubernetes traefik ingress 安装部署以及使用和注意点
1、简介 Traefik 是一款 open-source 边缘路由器,可让您轻松地发布服务. 它接收来自您的系统请求,并找出负责处理它们的后端服务组件。 traefik 与众不同在于它能够自动发现适合您服务的配置。 当 Traefik 检查您的基础设施时,它会发现相关信…...
电脑病毒已灭绝,是真的吗?
大家有没有这样一个疑问,觉得自己的电脑好像很久没有电脑病毒了?之前大名鼎鼎的蠕虫2000,熊猫烧香都变得不那么常见了。到底是电脑因为自身优化和杀毒软件的防护导致病毒变少了,还是本身电脑病毒变少了呢?(…...
基于RK3399+Linux QT地面测试台多参数记录仪测试平台软件设计(二)
rk3399 是由本土芯片厂商瑞芯微(Rockchip)研发的高性能、低功耗“中国芯”。在 2016 年 4 月,rk3399 首次在香港举行的电子展上亮相。芯片使用六核大 LITTLE 处理器: 包括四核的 Cortex-A53 和双核的 Cortex-A72,主频可…...
追梦之旅【数据结构篇】——详解C语言实现动态版顺序栈
详解C语言动态实现顺序栈~😎前言🙌预备小知识💞栈的概念及结构整体实现内容分析💞1.头文件编码实现🙌2.功能文件编码实现🙌3.测试文件的编写:🙌总结撒花💞😎博…...
Ubuntu 使用Nohup 部署/启动/关闭程序
目录 一、什么是nohup? 二、nohup能做什么? 三、nohup如何使用? 四、怎么查看/关闭使用nohup运行的程序? 命令 实例 一、什么是nohup? nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,…...
Spring 用到了哪些设计模式
关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。1. 策略模式关于策略模式的使用方式,在Spring中其实比较简单,…...
Linux上基于PID找到对应的进程名以及所在目录
Linux上基于PID找到对应的进程名以及所在目录前言找到进程的pid通过top命令查看通过 ps -ef |grep nignx进行查看通过端口号进行查看查看nginx进程目录前言 在一台新接触的服务器,却不熟悉搭建所在目录的时候,这时候就就可以通过ps查找进程,并…...
jvm知识点与面试题
jvm 1. 定义:Java虚拟机(Java virtual machine),一种能够运行Java字节码的虚拟机。 1.1. Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 2. jvm基本结构: 2.1. 1 类加载…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
