linux第10天

cat /proc/sys/kernel/msgmax最大消息长度限制

cat /proc/sys/kernel/msgmnb消息队列总的字节数

cat /proc/sys/kernel/msgmni消息条目数

消息队列综合案例

//server

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

#define ERR_EXIT(m) 	do 	{ 		perror(m); 	} 	while(0);

struct msgbuf {
   long mtype;       /* message type, must be > 0 */
   char mtext[1024];    /* message data */
};

int main()
{
	struct msgbuf revbuf;
	int key 	= 0;
	int msgid   = 0;
	int ret 	= 0;
	int pid		= 0;

	key = ftok("./", ‘2‘);
	if (key < 0)
		ERR_EXIT("ftok");

	//获取消息队列
	ret = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);
	if (ret < 0)
	{
		if (errno == EEXIST) //如果消息队列已存在
			msgid = msgget(key, 0666);
		else
			ERR_EXIT("msgget:");
	}
	else
		msgid = ret;

	//设置发送buf
	memset(&revbuf, 0, sizeof(revbuf));

	revbuf.mtype = 1; //接收方总是接收类型1
	while (1)
	{
		ret = msgrcv(msgid, &revbuf, sizeof(revbuf.mtext), 1, 0);
		if (ret < 0)
			ERR_EXIT("msgrcv:");

		fputs(revbuf.mtext + 4, stdout);

		pid = *((int *)(revbuf.mtext));

		revbuf.mtype = pid;
		ret = msgsnd(msgid, &revbuf, ret, IPC_NOWAIT);
		if (ret < 0)
			ERR_EXIT("msgsnd");
	}

	return 0;
}

  

//clt

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

#define ERR_EXIT(m) 	do 	{ 		perror(m); 	} 	while(0);

struct msgbuf {
   long mtype;       /* message type, must be > 0 */
   char mtext[1024];    /* message data */
};

int main()
{
	struct msgbuf sndbuf;
	struct msgbuf revbuf;
	int key 	= 0;
	int msgid   = 0;
	int ret 	= 0;
	int pid		= 0;

	key = ftok("./", ‘2‘);
	if (key < 0)
		ERR_EXIT("ftok");

	//获取消息队列
	ret = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);
	if (ret < 0)
	{
		if (errno == EEXIST) //如果消息队列已存在
			msgid = msgget(key, 0666);
		else
			ERR_EXIT("msgget:");
	}
	else
		msgid = ret;

	//设置发送buf
	memset(&sndbuf, 0, sizeof(sndbuf));
	memset(&revbuf, 0, sizeof(revbuf));

	pid = getpid(); //获取pid作为包头发出去

	while (fgets(sndbuf.mtext + 4, sizeof(sndbuf.mtext), stdin) != NULL)
	{
		sndbuf.mtype = 1; //发送方总是发送类型1

		memcpy(sndbuf.mtext, &pid, 4);
		//*((int*)sndbuf.mtext) = pid; //这句话是指将sndbuf.mtext最前面四个字节指向一个int类型指针

		ret = msgsnd(msgid, &sndbuf, strlen(sndbuf.mtext + 4) + 4, IPC_NOWAIT);
		if (ret < 0)
			ERR_EXIT("msgsnd");

		sleep(1);
		//读取
		ret = msgrcv(msgid, &revbuf, sizeof(revbuf.mtext), pid, IPC_NOWAIT);
		if (ret < 0)
			ERR_EXIT("msgrcv:");

		fputs(revbuf.mtext + 4, stdout);

		memset(&sndbuf, 0, sizeof(sndbuf));
		memset(&revbuf, 0, sizeof(revbuf));
	}
	return 0;
}

  

时间: 2024-11-09 20:47:27

linux第10天的相关文章

Red Hat Enterprise Linux 5.10在vmware10下的安装

Red Hat Enterprise Linux 5.10在vmware10下的安装 1.启动"新建虚拟机"向导程序.如下图,选择"自定义",点击"下一步" 2.选择虚拟机硬件兼容性,你可以根据自己需求选择,这里选择默认,如下图.单击"下一步" 3.指定虚拟机系统的安装方式.选择"稍后安装操作系统",如果选择"安装盘镜像文件(iso)",虚拟机启动后会自动执行快速安装,不方便用户控制安装

Linux 4.10中两个新特性与我的一段故事

今早5点半起来没有开始写文章,而是去西湾红树林连跑带走折腾了将近20公里,回来后就8点多了...洗了个澡之后坐稳当,开始写一段关于我的故事.        在2014年到2015年期间,我在负责研发一款无线安全网关,其实就是一个VPN,接入设备包括手机,xPad,盒子...这些设备的OS除了iOS之外,基本上都是基于Linux的Android.这个网关一般用于各种需要高性能加密通信的场合,在数据传输之前需要比较强的认证,服务端支持4G的加密带宽,支持复杂的接入控制和访问控制,支持复杂的Qos,另

10.32/10.33 rsync通过服务同步10.34 linux系统日志10.35 screen工具

- 10.32/10.33 rsync通过服务同步 - 10.34 linux系统日志 - 10.35 screen工具 - 扩展 1. Linux日志文件总管logrotate http://linux.cn/article-4126-1.html 2. xargs用法详解 http://blog.csdn.net/zhangfn2011/article/details/6776925 # 10.32 rsync通过服务来同步 上 - rsync通过服务的方式同步 - 要编辑配置文件/etc/

Linux 4.10.8 根文件系统制作(一)---环境搭建

一.工具 制作工具为busybox 下载地址:https://busybox.net/ 解压: 二.制作文件系统 进入目录,执行make menuconfig: 2.1 busybox setting 2.1.1 设定交叉编译器 改为 保存退出,然后执行 make 编译. 编译完成后创建文件系统存放目录: 2.2.2 安装glibc 安装完成后,fs_mini下会生成以下目录: 进入交差编译工具链的目录,找出lib库: 拷贝sysroot下的lib目录和usr/lib目录下的 .so 文件到fs

Linux系统管理10——进程和计划任务管理

Linux系统管理10——进程和计划任务管理 一.程序和进程的关系 1.程序 ·保存在硬盘.光盘等介质中的可执行代码和数据 ·静态保存的代码 2.进程 ·在CPU及内存中运行的程序代码 ·动态执行的代码 ·父.子进程:每一个进程可以创建一个或多个进程 二.静态查看进程统计信息 ps命令 1.ps aux 命令 (1)作用:以简单列表的形式显示出进程信息 (2)选项释义: a:显示当前终端下的所有进程信息,包括其他用户的进程 u:使用以用户为主的格式输出进程信息 x:显示当前用户在所有终端下的进程

linux 学习10 shell 基础

10.1 Shell概述 1.Shell是什么 ?Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一些程序. ?Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强.Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令. 2.Shell的分类 ?Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文

[红帽企业Linux.5.10服务器版]下安装VMWare Tools

VMware-Tools的作用:     VMWare Tools是Vmware提供的增强虚拟显卡和硬盘性能.以及同步虚拟机与主机时钟的驱动程序安虚拟机的驱动用的,直接效果就是可以提高虚拟系统的显示分辨率,而且鼠标可以在虚拟机界面和主机界面之间直接切换,不用按ctrl+alt. 安装条件:     1.VMware下的RedHatLinux已经安装完成     2.有本版本的VMware下的Linux光盘映像文件.     建议安装VMware完整版,这样VMware安装完成后Linux光盘映像

使用john破解ubuntu(linux)9.10密码

Title:使用john破解ubuntu(linux)9.10密码 --2011-11-23 15:00 ubuntu 9.10的账户密码加密方式改用sha512了,默认的john是破不了的,还好官方有补丁. 首先解压缩john1.75的源代码,vi编辑Makefile文件,添加我下面标注好的红色字体 LDFLAGS = -s -lcrypt JOHN_OBJS_MINIMAL = \ DES_fmt.o DES_std.o DES_bs.o \ BSDI_fmt.o \ MD5_fmt.o M

linux 3.10 busybox initramfs构建 qemu调试

linux 3.10 busybox initramfs构建 qemu调试 我的环境是vm ware虚拟机跑的centos 7 64位系统 1: 安装qemu 先安装SDL,负责qemu运行后只出现VNC server running on `::1:5900',而不出现qemu运行窗口,具体参考: http://www.crifan.com/qemu_test_arm_vnc_server_running_on_127_0_0_1_5900_no_other_output/ yum insta

Linux系统性能10条命令监控

Linux系统性能10条命令监控 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断. 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n