- 浏览: 309360 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
js调用excel、word打印 -
jyangzi5:
[u][/u]引用
常见hibernate面试题 -
wangv:
<code="java">Sy ...
常见hibernate面试题 -
bardo:
建议看看这一个
http://bardo.iteye.com ...
金额数字转中文大写 -
dotjar:
在继续讲解HQL其他更为强大的查询功能前,我们先来讲解以下利用 ...
常见hibernate面试题
UNIX系统通讯--学习笔记
1.IPC
--IPC系统简介
-IPC进程间通讯(Interprocess Communication)
1.消息队列(Message queue,q):应用与不同进程间少量数据的顺序共享
2.信号量(Semaphore,s):应用与进程之间的同步与互斥的控制
3.共享内存(Share Memory,m):应用与进程之间大批量数据的随即共享访问
1.1 查询IPC对象
shell命令ipcs查询当前系统的ipc对象信息
命令:ipcs[options]
-q 只查询ipc对象中的消息队列
-s 只查询ipc对象中的信号量
-m 只查询ipc对象中的共享内存
-a 查询ipc对象的全部属性
默认 -qsm
IPC对象的标识号ID:
-标识号为非负整数,unix通过标识号在系统唯一确定IPC对象。
-不同类型IPC对象的标识号可以相同,但同类型IPC对象的标识号一定唯一。
IPC对象的关键字KEY
-创建IPC对象,必须指定一个IPC关键字,为一个32位的整数。
1.2 删除IPC对象
shell命令ipcrm可以删除IPC对象信息
命令:ipcrm[options]
-q id 删除标识号为id的消息队列
-Q key 删除关键字为key的消息队列
-s id 删除标识号为id的信号量
-S key 删除关键字为key的信号量
-m id 删除标识号为id的共享内存
-M key 删除关键字为key的共享内存
ipcs -aq | grep 1234
chmod 777 msg_msgsnd1
./msg_msgsnd1
ipcsrm -q 1966292
ipcsrm -q 1234
1.3 IPC结构
/usr/include/sys/ipc.h
1.4 IPC内核限制
-消息队列:消息的最大长度,队列最大字节数,消息总数。
-信号量:最多可用信号量集,每个信号量集中最多的信号量个数,可用的信号量最大数。
--消息队列简介
-先进先出的队列数据结构,是一个链表。
2.1 消息队列结构
/usr/include/sys/msg.h
ipcs -aq
2.2 消息结构
/usr/include/sys/msg.h
--消息队列函数介绍
3.1 消息队列的创建
int msgget(key_t key,int msgflg);
-参数key是消息队列一关键字,具有唯一性。
-参数msgflg的低9位指定了队列的属主,属组和其他用户的访问权限,参数msgflg的其他位指定了
消息队列的创建方式。
* IPC_CREATE:创建消息队列,若存在就打开。
* IPC_EXCL:同IPC_CREATE一起使用,创建一个不存在的消息队列,若存在则函数调用失败。
vi msg_msgget.c
ipcs -q | grep 1234
cc -o msg_msgget msg_msgget.c
l msg_msgget
./msg_msgget
ipcs -aq | grep 1234
3.2 消息队列的发送
int msgsnd(int msqid,struct msgbuf *msgp,int msgsz,int msgflg);
* 参数msqid指定了发送消息队列的标识号。
* 参数msgp指向存储发送消息内容的内存地址。
* 参数msgsz指定发送消息数据的长度,不包括消息类型部分。
* 参数msgflg控制消息发送的方式。
* IPC_NOWAIT:消息采用非阻塞方式发送。
造成msgsnd()等待的条件有两种:
1.消息队列满:当前消息的大小与当前消息队列中的字节数之和超过了消息队列的总容量。
msg_cbytes + msgsz > msg_qbytes
2.消息总数满:系统中所有的消息队列的消息总数已经达到了操作系统的上限值。
vi msg_msgsnd.c
cc -o msg_msgsnd msg_msgsnd.c
ipcs -aq | grep 1234
ipcrm -Q 1234
./msg_msgsnd
ipcs -aq | grep 1234
3.3 消息队列的接收
3.4 消息队列的控制
--消息队列的常见应用模型
4.1 单消息队列完成(对等进程间)的双向通讯
4.2 双消息队列完成(对等进程间)的双向通讯
4.3 多消息队列完成(对等进程间)的双向通讯
4.4 单消息队列完成(客户-服务器进程间)的双向通讯
4.5 双消息队列完成(客户-服务器进程间)的双向通讯
4.6 多消息队列完成(客户-服务器进程间)的双向通讯
2.Socket
3.Tuxedo
1.IPC
--IPC系统简介
-IPC进程间通讯(Interprocess Communication)
1.消息队列(Message queue,q):应用与不同进程间少量数据的顺序共享
2.信号量(Semaphore,s):应用与进程之间的同步与互斥的控制
3.共享内存(Share Memory,m):应用与进程之间大批量数据的随即共享访问
1.1 查询IPC对象
shell命令ipcs查询当前系统的ipc对象信息
命令:ipcs[options]
-q 只查询ipc对象中的消息队列
-s 只查询ipc对象中的信号量
-m 只查询ipc对象中的共享内存
-a 查询ipc对象的全部属性
默认 -qsm
IPC对象的标识号ID:
-标识号为非负整数,unix通过标识号在系统唯一确定IPC对象。
-不同类型IPC对象的标识号可以相同,但同类型IPC对象的标识号一定唯一。
IPC对象的关键字KEY
-创建IPC对象,必须指定一个IPC关键字,为一个32位的整数。
1.2 删除IPC对象
shell命令ipcrm可以删除IPC对象信息
命令:ipcrm[options]
-q id 删除标识号为id的消息队列
-Q key 删除关键字为key的消息队列
-s id 删除标识号为id的信号量
-S key 删除关键字为key的信号量
-m id 删除标识号为id的共享内存
-M key 删除关键字为key的共享内存
ipcs -aq | grep 1234
chmod 777 msg_msgsnd1
./msg_msgsnd1
ipcsrm -q 1966292
ipcsrm -q 1234
1.3 IPC结构
/usr/include/sys/ipc.h
/* Common IPC Structures */ struct ipc_perm { uid_t uid; gid_t gid; uid_t cuid; gid_t cgid; mode_t mode; unsigned short seq; key_t key; }
1.4 IPC内核限制
-消息队列:消息的最大长度,队列最大字节数,消息总数。
-信号量:最多可用信号量集,每个信号量集中最多的信号量个数,可用的信号量最大数。
--消息队列简介
-先进先出的队列数据结构,是一个链表。
2.1 消息队列结构
/usr/include/sys/msg.h
struct msqid_ds { struct ipc_perm msg_perm; struct msg *msg_first; struct msg *msg_last; unsigned int msg_cbytes; msgqnum_t msg_qnum; msglen_t msg_qbytes; pid_t msg_lspid; pid_t msg_lrpid; time_t msg_stime; time_t msg_rtime; time_t msg_ctime; };
ipcs -aq
2.2 消息结构
/usr/include/sys/msg.h
struct msg { struct msg; long msg; short msg_ts; short msg_sport; }; struct msgbuf { long mtype; char mtext[1] };
--消息队列函数介绍
3.1 消息队列的创建
int msgget(key_t key,int msgflg);
-参数key是消息队列一关键字,具有唯一性。
-参数msgflg的低9位指定了队列的属主,属组和其他用户的访问权限,参数msgflg的其他位指定了
消息队列的创建方式。
* IPC_CREATE:创建消息队列,若存在就打开。
* IPC_EXCL:同IPC_CREATE一起使用,创建一个不存在的消息队列,若存在则函数调用失败。
vi msg_msgget.c
#include<sys/msg.h> #include<sys/types.h> #include<sys/ipc.h> #include<stdio.h> #include<sys/errno.h> extern int errno; struct mymsgbuf { long mtype; char ctext[100]; } void main() { int msid; struct mymsgbuf buf; if((msid = msgget(0x1234,0666|IPC_CREAT)) < 0) { fprintf(stderr,"open msg %X failed.\n",0x1234); return; } }
ipcs -q | grep 1234
cc -o msg_msgget msg_msgget.c
l msg_msgget
./msg_msgget
ipcs -aq | grep 1234
3.2 消息队列的发送
int msgsnd(int msqid,struct msgbuf *msgp,int msgsz,int msgflg);
* 参数msqid指定了发送消息队列的标识号。
* 参数msgp指向存储发送消息内容的内存地址。
* 参数msgsz指定发送消息数据的长度,不包括消息类型部分。
* 参数msgflg控制消息发送的方式。
* IPC_NOWAIT:消息采用非阻塞方式发送。
造成msgsnd()等待的条件有两种:
1.消息队列满:当前消息的大小与当前消息队列中的字节数之和超过了消息队列的总容量。
msg_cbytes + msgsz > msg_qbytes
2.消息总数满:系统中所有的消息队列的消息总数已经达到了操作系统的上限值。
vi msg_msgsnd.c
#include<sys/msg.h> #include<sys/types.h> #include<sys/ipc.h> #include<stdio.h> #include<sys/errno.h> extern int errno; struct mymsgbuf { long mtype; char ctext[100]; } void main() { int msid; struct mymsgbuf buf; if((msid = msgget(0x1234,0666|IPC_CREAT)) < 0) { fprintf(stderr,"open msg %X failed.\n",0x1234); return; } while(strncmp(buf.ctext,"exit",4)) { memset(&buf,0,sizeof(buf)); fprintf(stderr,"Please input:"); fgets(buf.ctext,sizeof(buf.ctext),stdin); buf.mtype = 1000; while((msgsnd(msid,&buf,strlen(buf.ctext),0)) < 0) { if(errno == EINTR) continue; return; } } }
cc -o msg_msgsnd msg_msgsnd.c
ipcs -aq | grep 1234
ipcrm -Q 1234
./msg_msgsnd
ipcs -aq | grep 1234
3.3 消息队列的接收
3.4 消息队列的控制
--消息队列的常见应用模型
4.1 单消息队列完成(对等进程间)的双向通讯
4.2 双消息队列完成(对等进程间)的双向通讯
4.3 多消息队列完成(对等进程间)的双向通讯
4.4 单消息队列完成(客户-服务器进程间)的双向通讯
4.5 双消息队列完成(客户-服务器进程间)的双向通讯
4.6 多消息队列完成(客户-服务器进程间)的双向通讯
2.Socket
3.Tuxedo
发表评论
-
c语言编程之字符串操作
2010-01-26 16:43 1311//在s串中查找与s1相匹配的字符串,找到后用s2将s中与 ... -
c语言编程之信号灯
2010-01-26 15:37 2309#include <stdio.h> #in ... -
c语言编程之消息队列
2010-01-26 14:24 11965//msg.c #include <stdio.h ... -
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 904c语言基础教程 -
socket网络编程基础
2010-01-20 14:02 841/*service.c*/ #include<st ... -
shell操作菜单
2009-12-15 16:53 1148#!/bin/sh #The path of she ... -
SHELL菜单
2009-12-15 10:45 1181SHELL菜单的编写从此变得如此简单 完善的流程控制 简洁精美 ... -
Linux Unix命令及shell编程-学习笔记-未完待续
2009-12-13 20:29 1145Linux Unix命令及shell编程 1.Linux U ... -
Tuxedo中间件开发与管理-学习笔记-未完待续
2009-12-13 20:28 1451Tuxedo中间件开发与管理 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语言编程宝典
相关推荐
SCO-Unix-核心参数-lcf-学习笔记.doc
Unix系统编程---makefile的编写Unix系统编程---makefile的编写Unix系统编程---makefile的编写
赠送jar包:netty-transport-native-unix-common-4.1.73.Final.jar; 赠送原API文档:netty-transport-native-unix-common-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-native-unix-common-4.1.73....
unix2dos-2.2-35.el6.x86_64.zip 解压直接: rpm -ivh unix2dos-2.2-35.el6.x86_64.rpm rpm -ivh unix2dos-2.2-35.el6.x86_64.rpm rpm -ivh unix2dos-2.2-35.el6.x86_64.rpm rpm -ivh unix2dos-2.2-35.el6....
赠送jar包:netty-transport-native-unix-common-4.1.74.Final.jar; 赠送原API文档:netty-transport-native-unix-common-4.1.74.Final-javadoc.jar; 赠送源代码:netty-transport-native-unix-common-4.1.74....
UNIX系统开发-系统调用-文件操作.doc.doc
赠送jar包:netty-transport-native-unix-common-4.1.73.Final.jar; 赠送原API文档:netty-transport-native-unix-common-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-native-unix-common-4.1.73....
unix网络编程-第三版读书笔记unix网络编程-第三版读书笔记
UNIX系统管理-系统安全-网络安全技术与黑客攻击威胁.doc
UNIX系统开发-静态库和动态库的建立..doc
UNIX系统开发-系统调用-time系统调用.doc
UNIX系统管理-系统安全-防火墙.doc
unix-privesc-check - unix配置不当检查工具.mht
UNIX系统开发-系统调用-STREAM机制.doc
dos2unix-7.4.0-3.el8.x86_64.rpm
UNIX系统开发-系统调用-进程间通信.doc
UNIX系统开发-系统调用-文件操作..doc
UNIX系统管理-系统安全-设备访问安全.doc
UNIX系统管理-系统安全-系统安全(用户篇).doc
dos2unix-3.1-37.el6.i686.rpm