fifo实现本地简单聊天程序

FIFO和线程的使用 做一个类似聊天的工具 第一个程序的代码 #include #include #include #include #include #include #include #include int res, r_fd, s_fd; pthread_t th_r, th_w; int kflag = 0; void *thread_w() { int tmp; char p[1000]; while 阅读详情

最近做了一个小练习,要求如下:
1.设计协议
2.客户端只写公共管道,向服务端发信息
3.客户端只读私有管道,接收信息。
4.服务端维护用户登录列表
详细如图:
这里写图片描述

1.server

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

#include "protocl.h"
#include "list.h"


int main(void)
{
    int status;   //判断创建公有管道是否成功
    int fd;     //打开公有管道的文件描述符
    int n;      //用以保存读到的字节数
    int fd_client; //打开私有管道的文件描述符
    char name[MAXLINE] = {
  
  0};   //保存客户端名
    char buf[MAXLINE] = {
  
  0};    //用以存放要写入管道或终端的提示信息
    PROC proc;          //协议,数据量大可以用堆

    struct list *ls = create_list();   //创建链表,维护登录用户名列表

    if ((status = mkfifo(SER_FIFO, 0644)) < 0)
        sys_err("mkfifo server");
    if ((fd = open(SER_FIFO, O_RDONLY)) < 0)
        sys_err("open SER_FIFO");

    while(1) {
        if ((n = read(fd, &proc, sizeof(PROC))) > 0) {
            if (proc.id == 1) {     //收到的是登录包

                insert_list(ls, 0, proc.src);  //插入到登录列表

                sprintf(buf, "%s is login\n", proc.src);
                write(STDOUT_FILENO, buf, strlen(buf));

  
利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码 /**************************************************************************/ //本程序是利用LINUX FIFO命名管道技术实现双向聊天的C语言源代码。 //优点:代码简洁明了。 //其中: //chat.c: 聊天源代码。 //makefile: 利用宏定义,把一个源码生成两个不同的可执行程序。 // //使用: //make clean 清除上次编译生成的结果文件。 //make 重新编译生成两个可执行程序。./a_chat和./b_chat的执行顺序没有先后。 //作者:david.q@sz 2012-8-11 2263537@qq.com /**************************************************************************/ 立即下载

相关推荐

基于linux网络聊天室

实现了群聊,私聊,点赞,在线好友显示,踢人,查询聊天记录,改密,文件传输,(区分超级用户和普通用户)

FIFO编写QQ聊天功能

开启管道mkfifo fifo1 fifo2 make或者gcc chat.c 得到a.out或者其他文件 ./a.out 1登录账号 在另一终端./a.out 2登录账号2 即可相互聊天

基于Linux消息队列的简易聊天室(C语言)(附源代码)

采用客户-服务器结构,其中服务器实现各个用户的登录并存储相关信息,客户端通过服务器端获取当前登录用户信息,然后各客户进程通过消息队列实现双向通信。 Linux IPC通信利用消息队列消息机制,多线程通信,字符串处理,链表操作,信号简单处理。消息队列是System V支持一种IPC机制,通过类似链表的操作向一个FIFO里通过msgsnd发送用户自定义数据,进程可以通过msgrcv来接收指定类似mtype的数据,从而实现进程间通信。 在服务器端实现广播功能,以及服务器退出以后通知;所有客户端退出并删除消息队列功能;对所有客户端的统计由链表实现 在客户端实现:上线提醒,下线提醒,服务器断线后子进程都退出。

Linux进程通信--FIFO(读)

Linux进程间通信之FIFO,适用于任意两个进程间.此C文件件为读端.

S/4中的16种特殊库存类型

S/4中的16种特殊库存类型

yanzibing99的博客 1万+

从D3 00到FF FF:手把手解析RTCM3.2协议帧结构(附Python解析代码)

本文深入解析RTCM3.2协议帧结构,从同步头标识到CRC校验算法,详细讲解如何通过Python代码实现二进制数据解析。文章包含完整的RTCM3.2解析器实现,涵盖消息类型解码、CRC校验等关键步骤,并附赠特定消息类型(如1005型基准站坐标)的解析示例,帮助开发者快速掌握GNSS差分数据传输协议的核心技术。

weixin_42550052的博客 353

FPGA实战:手把手教你用Verilog驱动4.3寸RGB触摸屏(附完整代码)

本文详细介绍了如何使用Verilog语言在FPGA上驱动4.3寸RGB触摸屏,包括时序设计、信号交互原理及完整代码实现。通过双计数器引擎设计和参数化模块,开发者可以高效构建800*480分辨率的显示驱动,并解决工程实践中的信号完整性和时序收敛问题。

rice5的博客 704

YOLOv11在视频流中的时序建模改进-(加入ConvLSTM或Transformer捕捉帧间关联)

本文提出了一种结合ConvLSTM和Transformer的改进YOLOv11算法,用于增强视频目标检测的时序建模能力。针对视频检测中运动模糊、遮挡等挑战,研究分析了ConvLSTM的局部时空特征建模和Transformer的全局注意力机制之间的互补性。通过数学公式详细阐述了ConvLSTM的门控机制和Transformer的自注意力计算原理,并提出分层融合策略:底层使用ConvLSTM处理高分辨率特征捕捉局部运动,高层应用Transformer建立全局时空关联。改进方案在YOLOv11架构中插入时序增强模

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 680

【大模型】DeepSeek + Coze 打造个人专属AI智能体使用详解

DeepSeek + Coze 打造个人专属AI智能体使用详解

congge 1万+

优秀的 Verilog/FPGA开源项目介绍(二十七)- 小型CPU

介绍在FPGA上实现一个CPU是一个令人兴奋的事情,但是太复杂的CPU实现起来太难,而且不适合去了解计算机的架构,所以今天介绍一些小型的CPU,比如8051、MIPS、MSP430等~关于RISC-V的项目,请查看《优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V》ZipCPUhttp://zipcpu.com/about/zipcpu.html项目介绍Z...

OpenFPGA的博客 2576

华为OD机试真题 新系统2026-04-01 C语言 实现【计算数列位置N的值】

1、输入M、N两个数,则按照以下规则形成一个数列; 2、数列的前M个元素的值为1到M; 3、从M+1个元素开始,计算的逻辑为: 如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;

MISAYAONE的博客 591

[DDR5] 模式寄存器 Mode Register MRR/MRW

模式寄存器用于定义各种操作模式。在初始化过程中,可以通过重新执行MRS命令来更改模式寄存器的内容。

串起点滴 1639

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 数组与指针1
Linux_forker
博客等级 码龄11年 3粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值