首页 > 其他分享 >/*创建消息队列*/ msgid=msgget(IPC_PRIVATE,0666 | IPC_CREAT);

/*创建消息队列*/ msgid=msgget(IPC_PRIVATE,0666 | IPC_CREAT);

时间:2023-06-16 13:08:24浏览次数:44  
标签:IPC CREAT msgget int msgid pid msg include


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX_TEXT 512

struct my_msg_st
{
    long int my_msg_type;
	char some_text[MAX_TEXT];
};

int main(void)
{
    long int msg_to_receive=0;
	struct my_msg_st some_data;
	int msgid;
	char buffer[BUFSIZ];
	pid_t pid;

	/*创建消息队列*/
	msgid=msgget(IPC_PRIVATE,0666 | IPC_CREAT);
	if(msgid==-1)
	{
	    fprintf(stderr,"msgget failed with error:%d\n",errno);
		exit(EXIT_FAILURE);
    }

	/*向消息队列中添加消息*/
		pid=fork();
	if(pid<0)
	{
	    fprintf(stderr,"fork failed with error:%d\n",errno);
		exit(EXIT_FAILURE);		
	}
	else if(pid)
	{
	    printf("Enter some text:");
		fgets(buffer,BUFSIZ,stdin);
		some_data.my_msg_type=1;
		strcpy(some_data.some_text,buffer);

		/*添加消息*/
		if(msgsnd(msgid,(void *)&some_data,MAX_TEXT,0)==-1)
		{
		    fprintf(stderr,"msgsed failed\n");
			exit(EXIT_FAILURE);
		}

		wait(NULL);
	}
	else
	{
		sleep(2);
		/*读取消息*/
	    if(msgrcv(msgid,(void *)&some_data,BUFSIZ,msg_to_receive,0)==-1)
		{
		    fprintf(stderr,"msgrcv failed with error: %d\n",errno);
			exit(EXIT_FAILURE);
		}
		printf("You wrote: %s",some_data.some_text);

		/*从系统内核中移走消息队列*/
		if(msgctl(msgid,IPC_RMID,0)==-1)
		{
		    fprintf(stderr,"msgctl(IPC_RMID) failed\n");
			exit(EXIT_FAILURE);
		}
		
	}
	return 0;
}



标签:IPC,CREAT,msgget,int,msgid,pid,msg,include
From: https://blog.51cto.com/gjwrxz/6499016

相关文章

  • createelement的用法(转载)
    document.createElement()是在对象中创建一个对象,要与appendChild()或insertBefore()方法联合使用。其中,appendChild()方法在节点的子节点列表末添加新的子节点。insertBefore()方法在节点的子节点列表任意位置插入新的节点。​下面,举例说明document.createElement()的用......
  • springboot项目启动失败之 org.springframework.boot.env.OriginTrackedYamlLoader.cr
    1、检查一下父项目的module的依赖是否,以及版本是否一致。例如<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.30</version></dependency>2、如何知道自己的org.yaml的版本,可以双击Shift键,输入如图所示,注意划红线的地方就是......
  • docker-compose构建kratos微服务项目运行失败,提示:runtime/cgo: pthread_create failed
    这个问题网上解决方案较少,我们这边问题定位是docker-compose.yaml配置问题在配置文件中新增配置如下:privileged:true设置容器的权限为root 最后解决......
  • Runtime.getRuntime().exec("ipconfig") 的用法
    ​ `Runtime.getRuntime().exec()`是Java中的一个方法,可以在Java程序中执行外部程序。这个方法返回一个`Process`对象,可以用于控制和查看执行的外部程序。`exec()`方法有多个重载版本,可以传递不同的参数来控制执行的外部程序。例如:importjava.io.BufferedReader;import......
  • Runtime.getRuntime().exec("ipconfig") 的用法
    ​ `Runtime.getRuntime().exec()`是Java中的一个方法,可以在Java程序中执行外部程序。这个方法返回一个`Process`对象,可以用于控制和查看执行的外部程序。`exec()`方法有多个重载版本,可以传递不同的参数来控制执行的外部程序。例如:importjava.io.BufferedReader;import......
  • 5、题目:Training in Creative Problem Solving: Effects on Ideation and Problem Fin
    期刊信息(1)作者:GeorgeB.Graen,StephenG.Graen(2)期刊:OrganizationalBehaviorandHumanPerformance(3)DOI:10.1016/0030-5073(82)90233-1(4)ISSN:0030-5073   研究背景创造力训练作为工业培训的一个子集,普遍面临着工业培训研究的许多问题,也面临着一些独特的问题。......
  • SpeedCreate(速搞) App Privacy Policy
    "WelcometotheuseofSpeedCreate(速搞) softwareservices(hereinafterreferredtoas"thisSoftware").ToensureyourrightsandforbetteruseofthisSoftware'sservices,pleasebesuretoreadthisagreementcarefullybeforeusing......
  • c++ create daemonizeMe
    daemonizeMe//Copyright(c)2017DeepAggarwal#include<getopt.h>#include<grp.h>#include<pwd.h>#include<stdlib.h>#include<syslog.h>#include<sys/stat.h>#include<sys/types.h>#include<unistd.h>#include......
  • qt6.5.0使用windeployqt发布程序提示Creating qt_ar_qm... Cannot open. : 拒绝访问
    报错内容如下图这是一个软件bug,qt社区的解决办法是,使用新版本6.5.1或6.6.0 ......
  • mysql启动报can't create/write to file 'var/run/mysqld/mysqld.pid 错误解决办法
    msql启动报错,启动不了。进入mysql日志默认的路径为/var/log/mysqld.log查看日志,发现报错信息如下:can'tcreate/writetofile'var/run/mysqld/mysqld.pid解决办法:将/var/run/mysqld/权限赋给mysql执行以下命令即可:chown-Rmysql/var/run/mysqldchgrp-Rmysql/var/ru......