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

9月3日

2.

发送端

#include <myhead.h>

struct msgbuf {
long mtype;               // 消息类型,必须 > 0
char mtext[128];     // 消息正文
};

int main() {
key_t key = ftok("/", 65);
if (key == -1) {
perror("ftok");
exit(1);
}

int msgid = msgget(key, IPC_CREAT | 0666);
if (msgid == -1) {

        perror("msgget");
exit(1);
}

struct msgbuf msg;
msg.mtype = 1; 

while (1) {

        printf("输入要发送的消息:");
fgets(msg.mtext, 128, stdin);

        if (strncmp(msg.mtext, "exit", 4) == 0) break;

        if (msgsnd(msgid, &msg, strlen(msg.mtext) + 1, 0) == -1) {
perror("msgsnd");
}
}

    return 0;
}

接收端

#include <myhead.h>

struct msgbuf {
long mtype;               // 消息类型,必须 > 0
char mtext[128];     // 消息正文
};

int main() {
key_t key = ftok("/", 65);
if (key == -1) {
perror("ftok");
exit(1);
}

int msgid = msgget(key, IPC_CREAT | 0666);
if (msgid == -1) {
perror("msgget");
exit(1);
}

struct msgbuf msg;

while (1) {
if (msgrcv(msgid, &msg, 128, 0, 0) == -1) {
perror("msgrcv");
exit(1);
}
printf("接收到消息: %s", msg.mtext);

        if (strncmp(msg.mtext, "exit", 4) == 0) {
printf("收到退出指令,关闭消息队列。\n");
msgctl(msgid, IPC_RMID, NULL);  // 删除队列
break;
}
}

    return 0;
}

编译运行:

gcc sender.c -o sender
gcc receiver.c -o receiver

# 开两个终端:
./receiver
./sender

3.

#include <myhead.h>

void handler(int signum)
{
if(signum==SIGUSR1)
{
printf("逆子没想到吧,防着你呢\n");
}
}

int main(int argc, const char *argv[])
{
if(signal(SIGUSR1,handler)==SIG_ERR)
{
perror("signal error\n");
return -1;
}

signal(SIGCHLD, SIG_IGN);//忽略子进程退出信号,系统启用自动回收

    pid_t pid=fork();

    if(pid>0)
{
//非阻塞回收
waitpid(pid,NULL,WNOHANG);
while(1)
{
printf("我真的还想再活500年\n");
sleep(1);
}
}else if(pid==0)
{
printf("活着没啥意思,寻思寻思\n");
sleep(5);
kill(getppid(),SIGUSR1);
exit(EXIT_SUCCESS);
}
return 0;
}

http://www.xdnf.cn/news/19862.html

相关文章:

  • 网格图--Day04--网格图DFS--2684. 矩阵中移动的最大次数,1254. 统计封闭岛屿的数目,130. 被围绕的区域
  • 现代软件栈全景解析,揭示从用户界面到基础设施的层层构建与关键技术
  • FFmpeg-Batch:GitHub开源视频批量处理工具,高效解决视频转格式与画质压缩需求
  • 华为HCIE证书多久续一次费?费用多少?
  • 接口保证幂等性你学废了吗?
  • Kafka Topic(主题)详解
  • 【CMake】message函数
  • Flutter + Web:深度解析双向通信的混合应用开发实践
  • 深入理解 jemalloc:从内存分配机制到技术选型
  • Docker--架构篇
  • C++CSP-J/S必背模板
  • 机器学习从入门到精通 - Transformer颠覆者:BERT与预训练模型实战解析
  • PLSQL导入excel数据的三种方法
  • PL-YOLOv8:基于YOLOv8的无人机实时电力线检测与植被风险预警框架,实现精准巡检与预警
  • 区块链版权存证的法律效力与司法实践
  • 52Hz——STM32单片机学习记录——FSMC
  • maven scope=provided || optional=true会打包到jar文件中吗?
  • 车辆安全供电系统开发原则和实践
  • VR节约用水模拟体验系统:沉浸式体验如何改变我们的用水习惯
  • Debezium报错处理系列之第130篇:OutOfMemoryError: Java heap space
  • Spring boot3.x整合mybatis-plus踩坑记录
  • Cesium 实战 - 自定义纹理材质 - 箭头流动线(图片纹理)
  • 企业资源计划(ERP)在制造业的定制化架构
  • 【QT随笔】巧用事件过滤器(installEventFilter 和 eventFilter 的组合)之 QComboBox 应用
  • 手把手教你开发第一个 Chrome 扩展程序:网页字数统计插件
  • 从竞态到原子:pread/pwrite 如何重塑高效文件 I/O?
  • 如何使文件夹内的软件或者文件不受windows 安全中心的监视
  • Java8特性
  • 【HarmonyOS 6】仿AI唤起屏幕边缘流光特效
  • leetcode-每日一题-人员站位的方案数-C语言