- 浏览: 309382 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
js调用excel、word打印 -
jyangzi5:
[u][/u]引用
常见hibernate面试题 -
wangv:
<code="java">Sy ...
常见hibernate面试题 -
bardo:
建议看看这一个
http://bardo.iteye.com ...
金额数字转中文大写 -
dotjar:
在继续讲解HQL其他更为强大的查询功能前,我们先来讲解以下利用 ...
常见hibernate面试题
//msg.c #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <errno.h> #define MSGKEY 1000 struct msgStru { long msgType; char msgText[4096]; }; main() { int iMsgId; struct msgStru slQMsg,slRcvMsg; int ilRc; iMsgId = msgget(MSGKEY,IPC_EXCL);/*检查消息队列是否存在*/ if ( iMsgId < 0 ){ iMsgId = msgget(MSGKEY,IPC_CREAT|0666);/*创建消息队列*/ if ( iMsgId < 0 ){ printf("create msgQ error! errno=%d[%s]\n",errno,strerror(errno)); exit(-1); } } slQMsg.msgType = 100; strcpy(slQMsg.msgText,"Hello mcfeng."); ilRc = msgsnd(iMsgId, &slQMsg, sizeof(struct msgStru),IPC_NOWAIT); if( ilRc < 0 ) { printf("msgsnd()写消息队列失败,errno=%d[%s]\n",errno,strerror(errno)); exit(-1); } ilRc = msgrcv(iMsgId,&slRcvMsg,sizeof(struct msgStru),0,0);/*接收消息队列*/ printf("text=[%s]\n",slRcvMsg.msgText); msgctl(iMsgId,IPC_RMID,0); /* 删除消息队列 */ exit(0); }
//receive.c #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <errno.h> #define MSGKEY 1024 struct msgstru { long msgtype; char msgtext[2048]; }; main() { int imsgID; struct msgstru slQMsg,slRcvMsg; int ilrc; char str[1024]; imsgID=msgget(MSGKEY,IPC_EXCL );//检查消息队列是否存在 if(imsgID < 0){ printf("消息不存在! errno=%d [%s]\n",errno,strerror(errno)); exit(-1); } ilrc = msgrcv(imsgID,&slRcvMsg,sizeof(struct msgstru),0,0);/*接收消息队列*/ printf("text=[%s]\n",slRcvMsg.msgtext); msgctl(imsgID,IPC_RMID,0); //删除消息队列 exit(0); }
//send.c #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <errno.h> #define MSGKEY 1024 struct msgstru { long msgtype; char msgtext[2048]; }; main() { int imsgID; struct msgstru slQMsg,slRcvMsg; int ilrc; char str[2048]; printf("请输入字符串:"); scanf ("%s",str); imsgID=msgget(MSGKEY,IPC_EXCL ); //检查消息队列是否存在 if(imsgID < 0){ imsgID=msgget(MSGKEY,IPC_CREAT|0666);//创建消息队列 if(imsgID <0 ){ printf("创建消息失败! errno=%d [%s]\n",errno,strerror(errno)); exit(-1); } } slQMsg.msgtype = 100; strcpy(slQMsg.msgtext, str); ilrc = msgsnd(imsgID,&slQMsg,sizeof(struct msgstru),IPC_NOWAIT); //发送消息队列 if ( ilrc < 0 ) { printf("msgsnd()写消息队列失败,errno=%d[%s]\n",errno,strerror(errno)); exit(-1); } exit(0); }
本程序实例介绍linux环境下利用消息队列进行进程间通信,主要介绍ftok函数,msgget创建消息队列和获取已存在消息队列,
msgctl获取消息队列结构信息,msgsnd发送消息到消息队列,msgrcv从消息队列中获取消息。
本程序由两个.c文件组成,msgQueueRecv.c和msgQueueSend.c,msgQueueRecv.c里面创建消息队列并阻塞式从消息队列接收消息,
最后删除消息队列(消息队列在内核创建);msgQueueSend.c获取以创建的消息队列,向消息队列发送消息。
请参考《unix环境高级编程》辅助学习。
//msgQueueRecv.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #define BUFF_LEN 1024 #define RET_ERROR 1 #define RET_OK 0 int main() { char *pcPathName = "/"; /* pathname for ftok */ int iProjectId = 5; /* id for ftok */ key_t kId; /* key id */ struct msqid_ds stMsgInfo; /* msg queue info structure */ struct msgRecvStructure { long lMsgType; /* msg type */ char acMsgRecvBuff[BUFF_LEN]; /* send msg buffer */ }stMsgRecv; int iRet; int iMsgId; /* msg queue id */ int iFlag = IPC_CREAT | IPC_EXCL | 0666; /* msg queue creating flag */ /* build key using ftok function */ kId = ftok(pcPathName, iProjectId); if ( kId == -1 ) { printf("building key error, ftok() error!\n"); return RET_ERROR; } /* create msg queue */ iMsgId = msgget(kId, iFlag); if ( iMsgId == -1 ) { printf("create msg queue error, msgget() error!\n"); return RET_ERROR; } /* recv msg from msg queue */ iRet = msgrcv(iMsgId, &stMsgRecv, BUFF_LEN, 1, 0); if ( iRet == -1 ) { printf("msg recv error, msgrcv() error!\n"); msgctl(iMsgId, IPC_RMID, &stMsgInfo); /* delete msg queue from kernel */ return RET_ERROR; } else { printf("msg recv content: %s\n", stMsgRecv.acMsgRecvBuff); } msgctl(iMsgId, IPC_RMID, &stMsgInfo); /* delete msg queue from kernel */ return RET_OK; }
msgQueueSend.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #define BUFF_LEN 1024 #define RET_ERROR 1 #define RET_OK 0 int main() { char *pcPathName = "/"; /* pathname for ftok */ int iProjectId = 5; /* id for ftok */ key_t kId; /* key id */ struct msqid_ds stMsgInfo; /* msg queue info structure */ struct msgSendStructure { long lMsgType; /* msg type */ char acMsgSendBuff[BUFF_LEN]; /* send msg buffer */ }stMsgSend; int iRet; int iMsgId; /* msg queue id */ int iFlag = 0666; /* msg queue creating flag */ /* build key using ftok function */ kId = ftok(pcPathName, iProjectId); if ( kId == -1 ) { printf("building key error, ftok() error!\n"); return RET_ERROR; } /* get existing msg queue */ iMsgId = msgget(kId, iFlag); if ( iMsgId == -1 ) { printf("get msg queue error, msgget() error!\n"); return RET_ERROR; } /* send msg to msg queue */ stMsgSend.lMsgType = 1; strcpy(stMsgSend.acMsgSendBuff, "hello,world"); iRet = msgsnd(iMsgId, &stMsgSend, strlen("hello,world")+1, IPC_NOWAIT); if ( iRet == -1 ) { printf("msg send error, msgsnd() error!\n"); return RET_ERROR; } return RET_OK; }
发表评论
-
c语言编程之字符串操作
2010-01-26 16:43 1312//在s串中查找与s1相匹配的字符串,找到后用s2将s中与 ... -
c语言编程之信号灯
2010-01-26 15:37 2309#include <stdio.h> #in ... -
c语言编程基础之IPC共享内存
2010-01-25 21:02 4709共享内存(Shared Memory) ... -
c语言相关书籍收藏
2010-01-25 20:23 906c函数速查chm版 软件编程规范培训实例与练习 -
c语言编程基础之日志记录
2010-01-25 10:25 3934#include <unistd.h> #i ... -
c语言编程基础之数据库操作
2010-01-23 00:12 1645查询: vi opsql.ec EXEC SQL incl ... -
c语言编程基础之文件操作(二)
2010-01-22 13:38 671数据块读写函数fread和fwtrite C语言还提供 ... -
c语言编程基础之文件操作
2010-01-22 09:46 1214文件使用方式 意义 “rt ... -
sco unix下informix数据库基本操作笔记
2010-01-21 15:07 1918启动数据库: oninit 进入操作界面 is ... -
指针学习笔记
2010-01-21 14:40 818main() { int a,b; int ... -
条件编译-结构体的使用
2010-01-21 13:41 1204main() { struct stu { ... -
c语言基础教程
2010-01-20 20:43 906c语言基础教程 -
socket网络编程基础
2010-01-20 14:02 842/*service.c*/ #include<st ... -
shell操作菜单
2009-12-15 16:53 1148#!/bin/sh #The path of she ... -
SHELL菜单
2009-12-15 10:45 1183SHELL菜单的编写从此变得如此简单 完善的流程控制 简洁精美 ... -
Linux Unix命令及shell编程-学习笔记-未完待续
2009-12-13 20:29 1145Linux Unix命令及shell编程 1.Linux U ... -
Tuxedo中间件开发与管理-学习笔记-未完待续
2009-12-13 20:28 1452Tuxedo中间件开发与管理 1.Tuxedo系统介绍 1 ... -
GCC编译器使用学习笔记(三)
2009-12-13 00:19 1592GCC编译器使用学习笔记(三) gcc debug gcc ... -
C语言库函数,Linux C语言函数大全,C语言编程宝典
2009-12-11 23:18 1864C语言库函数,Linux C语言函数大全,C语言编程宝典 -
centos下安装oracle9i笔记
2009-12-10 17:20 1445centos下安装oracle9i笔记 --初始启动字符界面 ...
相关推荐
Linux操作系统下C语言的进程通信、消息队列
多级反馈队列调度C语言设计进程控制块PCB表结构,适用于多级反馈队列调度算法。PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程已占用的CPU时间,进程还需要的CPU时间,进程的状态,当前队列指针等...
实验栈和队列的应用,其中栈和队列的基本算法,数制转换,括号匹配和判断回文的程序在一个主函数中完成,包括实验目的,功能分析,结果截图和实验心得。
商业编程-源码-数据结构(C语言版)顺序队列.zip
信号量 消息队列 栈 共享内存 socket
针对一些刚学二级C的朋友,里面有很多基础的C语言的结构以及程序,比如,队列,排序,二叉树,链表等等。
} } } 基础知识: 基础知识:51 单片机编程基础 单片机的外部结构: 1. DIP40 双列直插; 2. P0,P1,P2,P3 四个 8 位准双向 I/O 引脚;(作为 I/O 输入时,要先输出高电平) 3. 电源 VCC(PIN40)和地线 GND(PIN...
c语言编程集锦(C语言经典例题): 爱因斯坦的思考题 二叉树算法集 分解质因数新解 简单弹力球游戏 连续的素数之和改进版 魔术师翻牌 石子归并问题 贪吃蛇游戏 图形编程上下选择键模板 万年历全集 循环队列的程序 一个...
* 数据结构中的顺序表,单链表,双链表,堆栈,队列等结构的例子; * 数据结构中的所有查找算法(二分查找,哈希查找,分块查找,顺序查找)的例子; * 数据结构中的所有排序算法(冒泡排序,堆排序,直接插入...
链表堆栈队列二分查找牛顿迭代最小二乘高斯消去新普生积分改进欧拉法
c语言实现的链式链表,对链式链表的初始化,插入,删除,等相关操作!
数据结构,使用C语言编程,通过队列在vc++6.0上实现贪吃蛇小游戏。
下载不后悔,带题带答案,为下一届学员造福。 1.简单档1题: 试按以下给出的排序算法为整数链表编写一个排序函数: 该算法是按表元键值的...1、 试用C语言编程实现以上功能 2、 10个数字随机生成 3、 程序可读性好
自己写的代码,有详细的注释,供大家参考。
用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。 PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的...
avr单片机开发的对各个硬件模块进行操作的函数,但是进过简单修改后可用于其他的单片机。将依赖硬件的部分与硬件无关的部分分开处理。
c语言编程集锦,包含初学者样例约80个,比如随机数生成,时间,堆栈,队列,拷贝等等
C语言的一些基础的程序实例,包括C语言版循环队列百鸡百钱,梅花数,泰勒级数求sin,牛顿迭代,排序,杨辉三角。
程序逻辑与C语言:第10章 对文件的输入输出.ppt
socket编程,使用c语言,需要的可以下载,具体可以去我的博客看一下,使用多线程和队列缓冲机制