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

Linux学习——Linux进程间通信(IPC)聊天程序实践

Linux学习——Linux进程间通信(IPC)聊天程序实践

一、在阿里云服务器上使用talk程序

Linux系统自带的talk命令可以让两个登录用户进行实时文字聊天:

  1. 用户A执行:talk usernameB
  2. 用户B会收到通知,并需要执行: talk usernameA@hostname
  3. 然后双方就可以开始聊天了,屏幕会分成上下两部分
  4. image-20250420181514161

image-20250420181343202

二、用C语言实现简单的进程间的通信聊天程序

1.使用命令管理(FIFO)

server.c(服务器端)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stddef.h>  // 添加 size_t 的定义#define FIFO_FILE "chat_fifo"int main() {int fd;char readbuf[80];char end[10];int to_end;// 创建命名管道mkfifo(FIFO_FILE, 0666);while(1) {fd = open(FIFO_FILE, O_RDONLY);read(fd, readbuf, sizeof(readbuf));printf("Client: %s\n", readbuf);close(fd);printf("Server: ");fgets(readbuf, sizeof(readbuf), stdin);strcpy(end, "quit\n");to_end = strcmp(readbuf, end);if (to_end == 0) {fd = open(FIFO_FILE, O_WRONLY);write(fd, readbuf, strlen(readbuf));close(fd);break;}fd = open(FIFO_FILE, O_WRONLY);write(fd, readbuf, strlen(readbuf));close(fd);}unlink(FIFO_FILE);  // 删除FIFO文件return 0;
}

client.c(客户端)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stddef.h>  // 添加 size_t 的定义#define FIFO_FILE "chat_fifo"int main() {int fd;char readbuf[80];char end[10];int to_end;while(1) {printf("Client: ");fgets(readbuf, sizeof(readbuf), stdin);strcpy(end, "quit\n");to_end = strcmp(readbuf, end);fd = open(FIFO_FILE, O_WRONLY);write(fd, readbuf, strlen(readbuf));close(fd);if (to_end == 0) {break;}fd = open(FIFO_FILE, O_RDONLY);read(fd, readbuf, sizeof(readbuf));printf("Server: %s\n", readbuf);close(fd);}return 0;
}

2.编译和运行

  • 编译
gcc server.c -o server
gcc client.c -o client
  • 在两个不同的终端分别运行
./server
./client

2.编译和运行

  • 编译
gcc server.c -o server
gcc client.c -o client
  • 在两个不同的终端分别运行
./server
./client

image-20250420124240561

相关文章:

  • NHANES指标推荐:RFM
  • 恒源云常用命令
  • 【HDFS入门】HDFS故障排查与案例分析:从日志分析到实战解决
  • 清理C盘组合拳:最高释放空间80GB+
  • WebSocket启用备忘
  • Matlab 步进电机传递函数模糊pid
  • Yocto项目实战教程‑第6章‑Poky‑镜像菜谱‑机器配置文件‑发行版配置文件‑QEMU
  • 2025 第十六届蓝桥杯Java B组
  • 二进制枚举算法
  • 嵌入式学习——虚拟机通信
  • 零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!
  • xss4之cookie操作
  • 前端知识深度学习
  • 认识MCP Function Calling AI Agent
  • 每日一题算法——链表相交
  • 21.Chromium指纹浏览器开发教程之触摸屏点指纹定制
  • Web前端:百度首页克隆 - 前端开发练习
  • 深入浅出 C++ 核心基础:从语法特性到入门体系构建
  • langchain-nextjs-template 模板安装与配置
  • 【深度学习—李宏毅教程笔记】各式各样的 Attention
  • 生态环境部谈拿手持式仪器到海边测辐射:不能测量水中放射性核素含量
  • 出35万元为副县长的女友凑购房首付,青海一商人被判缓刑
  • 生态环境部:我国核电规模全球第一,总体安全可控
  • 最高法典型案例:学生在校受伤,学校并非必然担责
  • 神舟十九号航天员乘组计划于4月29日返回东风着陆场
  • 广电总局加快布局超高清视听产业链,多项成果亮相