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 类加载…...
【Sora 2视频后期处理黄金法则】:20年AI影像专家亲授5大不可绕过的帧级调优技巧
更多请点击: https://codechina.net 第一章:Sora 2视频后期处理的底层逻辑与帧级思维重构 Sora 2并非传统时间轴驱动的剪辑工具,其视频后期处理建立在扩散模型与隐空间帧序列联合优化的基础之上。每一帧不再作为孤立图像存在,而是…...
3分钟解锁微信网页版:wechat-need-web插件让你的浏览器变身全能微信客户端
3分钟解锁微信网页版:wechat-need-web插件让你的浏览器变身全能微信客户端 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为工作电脑…...
借脑之术:一根记忆枝条,嫁接到另一棵树上 —— Memory Grafting 深度解读
论文信息 标题 Memory Grafting: Scaling Language Model Pre-training via Offline Conditional Memory 作者 Runxi Cheng, Yuchen Guan, Yongxian Wei, Qianpu Sun, Qixiu Li, Sinan Du, Feng Xiong, Chun Yuan, Yan Lu, Yeyun Gong (10人) 机构 微软亚洲研究院 (Microsoft R…...
GORM 标签详解(数据库字段映射核心)
很多人刚学 GORM: 会觉得: gorm:"primaryKey" gorm:"index" gorm:"not null"这些东西: 像“魔法字符串”。 其实: 它本质上是在告诉 GORM: 数据库这一列应该怎么创建也就是:…...
遗传算法融合线性规划:超参数调优的高效双层优化策略
1. 项目概述:当遗传算法遇上线性规划,超参数调优的新思路在机器学习项目的落地过程中,有一个环节既让人着迷又令人头疼,那就是超参数调优。模型架构的层数、神经元的数量、学习率、正则化强度……这些“旋钮”的微小转动ÿ…...
终极指南:如何将普通智能音箱改造成AI语音助手
终极指南:如何将普通智能音箱改造成AI语音助手 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 您是否想过,家中那台只会简…...
5分钟快速上手:DouYinBot抖音无水印视频解析工具终极指南
5分钟快速上手:DouYinBot抖音无水印视频解析工具终极指南 【免费下载链接】DouYinBot 该项目仅自用,不提供抖音视频下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在短视频创作火爆的今天,你是否曾为抖音视频上的水印而…...
结构体标签与数据流向 笔记
一、什么是结构体标签(Struct Tag) Go 里面: 结构体字段后面经常会跟一串奇怪的东西: Nickname string json:"nickname" gorm:"column:nickname" toml:"nickname"这个东西: 叫ÿ…...
Java中的char[] 和 Character[]什么联系,StringBuilder 存在的意义,如何将 Character[] 数组转换成 String
在 Java 中,char[] 和 Character[] 虽然看起来很像,但它们在底层结构和使用场景上有本质区别。1. 核心区别:基本数据类型 vs. 包装类char[] (基本类型数组):这是一个由 基本数据类型 char 组成的数组。在内存中,它直接…...
3小时从零掌握:通达信缠论量化插件终极实战指南 [特殊字符]
3小时从零掌握:通达信缠论量化插件终极实战指南 🚀 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 通达信缠论量化插件是一款革命性的技术分析工具,专为股票投资者打造…...
