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

中国人自己的空间站网上广告怎么推广

中国人自己的空间站,网上广告怎么推广,北京网站推广排名公司,做天猫网站多少钱概念: 不同进程能通过消息队列来进行通信,不同进程也能获取或发送特定类型的消息,即选择性的收发消息。 一般一个程序采取子进程发消息,父进程收消息的模式 常用函数功能: fork(); // 创建子进程 struct msgbuf{ …

概念:

不同进程能通过消息队列来进行通信,不同进程也能获取或发送特定类型的消息,即选择性的收发消息。

一般一个程序采取子进程发消息,父进程收消息的模式

常用函数功能:

fork(); // 创建子进程

struct msgbuf{ // 数据协议long mtype; // 数据类型,由用户自己定义char buf[N]; // 数据部分
};

key = ftok(“.”, ‘a’) // 创建键值

第一个参数是路径名,通常是一个已经存在的文件或目录的路径名。在这个例子中,.表示当前目录,也就是代码所在的目录。
第二个参数是一个由用户自定义的字符,用于生成键值。在这里,它是字符 ‘a’。

这个键值的作用即标识一个消息队列,通过键值识别具体的某条消息队列


代码:

SndTp1RcvTp2.c:

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <errno.h>
#include <signal.h>#define N 128
#define SIZE sizeof(struct msgbuf) - sizeof(long)
#define TYPE1 100
#define TYPE2 200struct msgbuf{long mtype;char buf[N];
};int main(){key_t  key;if((key = ftok(".", 'a')) < 0){ // 创建键值 perror("ftok error");return -1;}int msqid;struct msgbuf msg_snd, msg_rcv; // 发送端接收端if((msqid = msgget(key, IPC_CREAT|IPC_EXCL|0664)) < 0){ // 创建消息队列 存在则报错 出现错误返回-1 if(errno != EEXIST){ // 若消息不存在 perror("msgget error");return -1; }else{ // 则消息队列存在 直接打开 msqid = msgget(key, 0664); } } pid_t pid;pid = fork(); // 创建子进程if(pid < 0){perror("fork error");return -1;} else if(pid == 0){ // 若是子进程 while(1){msg_snd.mtype = TYPE1; // 标识信息的符号fgets(msg_snd.buf, N, stdin); // 标准输入 读取用户输入msg_snd.buf[strlen(msg_snd.buf) - 1] = '\0'; // 方便读取msgsnd(msqid, &msg_snd, SIZE, 0); // 消息无法发送则阻塞直到可发送为止 if(strncmp(msg_snd.buf, "quit", 4) == 0){ // 查看用户输入若为quit 则结束父进程 子进程自我结束 kill(getppid(), SIGKILL);break;} } }else{ // 父进程 while(1){msgrcv(msqid, &msg_rcv, SIZE, TYPE2, 0); // 只接收 TYPE2 直到等到有符合条件的消息为止 if(strncmp(msg_rcv.buf, "quit", 4) == 0){kill(pid, SIGKILL);msgctl(msqid, IPC_RMID, NULL); // 删除消息队列 break;}printf("msg_b:%s\n", msg_rcv.buf);}}	return 0;
}

SndTp2RcvTp1.c:

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <errno.h>
#include <signal.h>#define N 128
#define SIZE sizeof(struct msgbuf) - sizeof(long)
#define TYPE1 100
#define TYPE2 200struct msgbuf{long mtype;char buf[N];
};int main(){key_t  key;if((key = ftok(".", 'a')) < 0){ // 创建键值 perror("ftok error");return -1;}int msqid;struct msgbuf msg_snd, msg_rcv; // 发送端接收端if((msqid = msgget(key, IPC_CREAT|IPC_EXCL|0664)) < 0){ // 创建消息队列 存在则报错 出现错误返回-1 if(errno != EEXIST){ // 若消息不存在 perror("msgget error");return -1; }else{ // 则消息队列存在 直接打开 msqid = msgget(key, 0664); } } pid_t pid;pid = fork(); // 创建子进程if(pid < 0){perror("fork error");return -1;} else if(pid == 0){ // 若是子进程  发送方 while(1){msg_snd.mtype = TYPE2; // 标识信息的符号fgets(msg_snd.buf, N, stdin); // 标准输入 读取用户输入msg_snd.buf[strlen(msg_snd.buf) - 1] = '\0'; // 方便读取msgsnd(msqid, &msg_snd, SIZE, 0); // 消息无法发送则阻塞直到可发送为止 if(strncmp(msg_snd.buf, "quit", 4) == 0){ // 查看用户输入若为quit 则结束父进程 子进程自我结束 kill(getppid(), SIGKILL);break;} } }else{ // 父进程  接受方 while(1){msgrcv(msqid, &msg_rcv, SIZE, TYPE1, 0); // 只接收 TYPE1 直到等到有符合条件的消息为止 if(strncmp(msg_rcv.buf, "quit", 4) == 0){kill(pid, SIGKILL);msgctl(msqid, IPC_RMID, NULL); // 删除消息队列 break; }printf("msg_a:%s\n", msg_rcv.buf);}}return 0;
}

俩个程序各开一个子进程,父进程。子进程负责发送信息,父进程负责接收信息,最终能实现在不同终端通讯,发送quit终止通讯

效果:

在这里插入图片描述

http://www.dinnco.com/news/10534.html

相关文章:

  • 瑞士自助游 做的好的网站今天刚刚发生的新闻事故
  • 网站做端口是什么情况科技网站建设公司
  • 做网站 赚钱吗在线资源搜索引擎
  • 济南市建设监理有限公司网站谷歌优化工具
  • 小型企业网站开发价格重庆seo技术教程
  • 安徽股票配资网站建设西安网站seo哪家公司好
  • 做网站买什么服务器 便宜企业推广哪个平台好
  • 杭州蒙特网站建设seo刷排名公司
  • wordpress 顶部菜单什么是seo搜索
  • 网站建设日记洗发水营销推广软文800字
  • 什么网站的页面做的比较好看信息推广
  • 做设计的素材网站有哪些谷歌google中文登录入口
  • 好看的网站后台模板建设网站的网站首页
  • 大型外贸商城网站建设淘宝自动推广软件
  • 哈尔滨行业网站深圳外贸网络推广渠道
  • 电子商务技术搜索引擎网站优化和推广方案
  • 电商网站建设与课程设计抖音广告推广
  • phython 做的网站微信营销软件有哪些
  • 河南住房和城乡建设委员会网站百度法务部联系方式
  • 暖通毕业设计代做网站门户网站推广方案
  • 免费微信网站怎么做百度seo运营工作内容
  • 医院网站建设步骤搜素引擎优化
  • 单页 网站模板友情链接获取的途径有哪些
  • 海外手机充值app下载广州seo顾问seocnm
  • 网站设计页面如何做居中深圳市网络seo推广平台
  • 河南网站公司购买友情链接网站
  • wordpress采集去掉多余链接火车头汕头seo关键词排名
  • 什么是网站维护中广州百度推广客服电话多少
  • 购物网站设计谷歌排名网站优化
  • 网站建设课程设计内容住房和城乡建设部