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

做门名片设计网站甘肃省住房与建设厅网站首页

做门名片设计网站,甘肃省住房与建设厅网站首页,无需下载国外黄冈网站推广,广州微信小程序开发制作公司目录 一、验证环境 二、Linux进程间通信进制 三、XSI-IPC机制 四、IPC相关地操作系统命令 1、ipcs #xff08;1#xff09;-a #xff08;2#xff09;-l 2、ipcrm #xff08;1#xff09;-Q 五、IPC对象的key值和ID值 六、消息队列 七、消息队列相关结构体…目录 一、验证环境 二、Linux进程间通信进制 三、XSI-IPC机制 四、IPC相关地操作系统命令 1、ipcs 1-a 2-l 2、ipcrm 1-Q 五、IPC对象的key值和ID值 六、消息队列 七、消息队列相关结构体 1、struct msqid_ds 2、struct ipc_perm 3、MsgInfoSt自定义 八、消息队列相关函数 1、ftok 1声明 2作用 3参数 4返回值 2、msgget 1声明 2作用 3参数 4返回值 3、msgctl 1声明 2作用 3参数 4返回值 4、msgsnd 1声明 2作用 3参数 4返回值 5errno错误码 5、msgrcv 1声明 2作用 3参数 4返回值 5errno错误码 九、测试 1、发送端源码 2、接收端源码 3、测试效果 1发送端会话 2接收端会话 一、验证环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2 二、Linux进程间通信进制 Linux进程间通信进制可以按照进程是否在同一主机上或不同主机上分为两大类具体分类如下表 一级二级三级四级进程间通信进制同一主机进程间通信机制Unix进程间通信进制管道命名管道信号XSI-IPC机制信号量集共享内存消息队列不同主机进程间通信机制RPCSocket 三、XSI-IPC机制 名称英文名描述信号量集semaphore set用于实现进程之间的同步与互斥。共享内存shared memory用于在进程之间高效地共享数据适用于数据量大速度要求高地场景。消息队列message queue进程之间传递数据地一种简单办法。 四、IPC相关地操作系统命令 这些命令可以辅助我们更好地观察实验现象有的话添彩没有的话也麽事情。 1、ipcs 命令用途是提供有关IPC设施的信息。 只介绍我用的多的。 1-a 输出所有信息。 [rootczg2 ~]# ipcs -a--------- 消息队列 ----------- 键 msqid 拥有者 权限 已用字节数 消息 ------------ 共享内存段 -------------- 键 shmid 拥有者 权限 字节 nattch 状态 0x00000000 2 gdm 777 16384 1 目标 0x00000000 5 gdm 777 2129920 2 目标 --------- 信号量数组 ----------- 键 semid 拥有者 权限 nsems 2-l 显示资源限制 [rootczg2 ~]# ipcs -l---------- 消息限制 ----------- 系统最大队列数量 32000 最大消息尺寸 (字节) 8192 默认的队列最大尺寸 (字节) 16384---------- 同享内存限制 ------------ 最大段数 4096 最大段大小 (千字节) 18014398509465599 最大总共享内存 (千字节) 18014398442373116 最小段大小 (字节) 1--------- 信号量限制 ----------- 最大数组数量 128 每个数组的最大信号量数目 250 系统最大信号量数 32000 每次信号量调用最大操作数 32 信号量最大值 32767 2、ipcrm 命令用途是删除XSI-IPC对象。 只介绍我用的多的。 1-Q 根据消息队列键值Key删除消息队列。 [rootczg2 ~]# ipcs -a--------- 消息队列 ----------- 键 msqid 拥有者 权限 已用字节数 消息 0x0000000a 21 gbase 666 0 0 ------------ 共享内存段 -------------- 键 shmid 拥有者 权限 字节 nattch 状态 0x00000000 2 gdm 777 16384 1 目标 0x00000000 5 gdm 777 2129920 2 目标 --------- 信号量数组 ----------- 键 semid 拥有者 权限 nsems [rootczg2 ~]# ipcrm -Q 0x0000000a[rootczg2 ~]# ipcs -a--------- 消息队列 ----------- 键 msqid 拥有者 权限 已用字节数 消息 ------------ 共享内存段 -------------- 键 shmid 拥有者 权限 字节 nattch 状态 0x00000000 2 gdm 777 16384 1 目标 0x00000000 5 gdm 777 2129920 2 目标 --------- 信号量数组 ----------- 键 semid 拥有者 权限 nsems 五、IPC对象的key值和ID值 Linux系统中的IPC对象是全局的为每个IPC对象分配唯一ID因为每个内核中的IPC结构消息队列、信号量或共享内存段都用一个非负整数表示。 六、消息队列 序号描述1进程之间传递数据的一种简单方法。2把每个消息看作一条记录具有特定的格式。3消息队列就是消息的链表。4对消息队列有写权限的进程可以按照一定的规则添加新消息。5对消息队列有读权限的进程可以从消息队列中读走消息。6消息队列更够克服管道或命名管道机制的一些缺点如实时性差。 七、消息队列相关结构体 1、struct msqid_ds 内核内一条消息的记录结构。 /* Structure of record for one message inside the kernel.The type struct msg is opaque. */ struct msqid_ds {struct ipc_perm msg_perm; /* structure describing operation permission */__time_t msg_stime; /* time of last msgsnd command */ #ifndef __x86_64__unsigned long int __unused1; #endif__time_t msg_rtime; /* time of last msgrcv command */ #ifndef __x86_64__unsigned long int __unused2; #endif__time_t msg_ctime; /* time of last change */ #ifndef __x86_64__unsigned long int __unused3; #endif__syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */msgqnum_t msg_qnum; /* number of messages currently on queue */msglen_t msg_qbytes; /* max number of bytes allowed on queue */__pid_t msg_lspid; /* pid of last msgsnd() */__pid_t msg_lrpid; /* pid of last msgrcv() */__syscall_ulong_t __unused4;__syscall_ulong_t __unused5; }; 参数描述 msg_perm 结构体描述符操作权限。msg_stime最后一条发送函数的时间。 msg_rtime 最后一条接受函数的时间。 msg_ctime 最后更改的时间。 __msg_cbytes 队列的当前字节数。 msg_qnum 队列的当前消息数。 msg_qbytes 队列允许的最大字节数。 msg_lspid 最后一个发送函数进程的pid号。 msg_lrpid 最后一个接收函数进程的pid号。 2、struct ipc_perm 用于将权限信息传递给 IPC 操作的数据结构。 /* Data structure used to pass permission information to IPC operations. */ struct ipc_perm{__key_t __key; /* Key. */__uid_t uid; /* Owners user ID. */__gid_t gid; /* Owners group ID. */__uid_t cuid; /* Creators user ID. */__gid_t cgid; /* Creators group ID. */unsigned short int mode; /* Read/write permission. */unsigned short int __pad1;unsigned short int __seq; /* Sequence number. */unsigned short int __pad2;__syscall_ulong_t __unused1;__syscall_ulong_t __unused2;};参数描述 __key IPC键值。 uid 拥有者用户ID。 gid 拥有者组ID。 cuid 创建者用户ID。 cgid 创建者组ID。 mode 读写权限。 __seq 序列号。 3、MsgInfoSt自定义 这个结构体第一个参数必须是long类型第二个类型是char类型。 typedef struct MsgInfoSt {MessageType MsgType;char MsgInfo[MESSAGE_STR_MAX_SIZE]; }MsgInfoSt; 参数描述MsgType正消息类型。必须大于0小于0的消息类型有特殊的指示作用。MsgInfo消息数据。 八、消息队列相关函数 1、ftok 1声明 key_t ftok(const char *__pathname, int __proj_id) 2作用 名称描述英文解释convert a pathname and a project identifier to a System V IPC key中文解释将路径名和项目标识符转换为 System V IPC 密钥。 3参数 参数名描述__pathname文件路径通信的进程间需要一样这样才会生成同一个Key。__proj_id项目编号通信的进程间需要一样这样才会生成同一个Key。 4返回值 名称描述成功返回Key。失败返回-1可以用errno得到具体错误码。 2、msgget 1声明 int msgget(key_t __key, int __msgflg) 2作用 名称描述英文解释get the XSI message queue identifier中文解释获取 XSI 消息队列标识符。 3参数 参数名描述__key创建或打开消息队列对象时指定的Key值。__msgflg 设置的访问权限取值为一个或多个值的或。举例 1000400读权限。 2000200写权限。 3010000改变控制方式权限。没用过 还可以附加其他参数按位或 1IPC_CREAT消息队列不存在创建存在就打开。 2IPC_EXCL只有消息队列不存在时才能创建。不然报错。 3IPC_NOWAIT如果操作需要等待则直接返回错误。 4返回值 名称描述成功返回消息队列对象ID。失败返回-1可以用errno得到具体错误码。 3、msgctl 1声明 int msgctl(int __msqid, int __cmd, struct msqid_ds *__buf) 2作用 名称描述英文解释XSI message control operations中文解释XSI 消息控制操作。 3参数 参数名描述__msqid消息队列对象ID。__cmd 对__msqid指定的消息队列执行的命令。支持的命令有 1IPC_STAT取次队列的msqid_ds结构存放到__buf中。 2IPC_SET将ipc_perm结构体的uid、gid、mode和msg_qbytes从__buf复制到__msqid对应消息队列的msqid_ds结构体中。 3从操作系统中删除该消息队列及其所有数据。 __bufmsqid_ds结构体。 4返回值 名称描述成功返回0。失败返回-1可以用errno得到具体错误码。 4、msgsnd 1声明 int msgsnd(int __msqid, const void *__msgp, size_t __msgsz, int __msgflg) 2作用 名称描述英文解释XSI message send operation中文解释XSI 消息发送操作。 3参数 参数名描述__msqid消息队列对象ID。__msgp 指向自定义结构体MsgInfoSt的结构体指针。 __msgsz消息的字节大小。__msgflg 0阻塞模式。 IPC_NOWAIT非阻塞模式。 当出现下述情况时 1指定的消息队列容量已满。 2在系统范围存在太多的消息。 若设置了IPC_NOWAIT会立即返回EAGAIN错误。 4返回值 名称描述成功返回0。失败返回-1可以用errno得到具体错误码。 5errno错误码 错误码错误描述 EAGAIN __msgflg为IPC_NOWAIT时 1消息队列已满。 2队列中的消息总数等于系统限制值。 3队列中的字节总数等于系统限制值。 EIDRM 系统中删除了此队列。 EINTR 捕捉到了一个信号并从信号处理程序返回。 EACCES 调用进程没有操作权限。 EINVAL __msqid的值不是有效的消息队列标识符或者mtype的值小于1;或者msgsz的值小于0或大于系统施加的限制。 5、msgrcv 1声明 ssize_t msgrcv(int __msqid, void *__msgp, size_t __msgsz, long __msgtyp, int __msgflg) 2作用 名称描述英文解释XSI message receive operation中文解释XSI 消息接收操作。 3参数 参数名描述__msqid消息队列对象ID。__msgp 指向自定义结构体MsgInfoSt的结构体指针。 __msgsz消息的字节大小。__msgtyp 接收的消息类型。 等于0返回队列中的第一个消息。 大于0返回消息队列中类型值为__msgtyp的第一个消息。 小于0返回消息队列中类型值小于或等于__msgtyp绝对值中类型值最小的第一个消息。 __msgflg 当消息队列没有收到的消息时会如何操作 0阻塞模式。 IPC_NOWAIT非阻塞模式。 MSG_NOERROR如果__msgsz小于__msgp返回的长度数据截断不会发生报错。 4返回值 名称描述成功返回0。失败返回-1可以用errno得到具体错误码。 5errno错误码 错误码错误描述 EAGAIN __msgflg为IPC_NOWAIT时 1消息队列已满。 2队列中的消息总数等于系统限制值。 3队列中的字节总数等于系统限制值。 EIDRM 系统中删除了此队列。 EINTR 捕捉到了一个信号并从信号处理程序返回。 EACCES 调用进程没有操作权限。 EINVAL __msqid的值不是有效的消息队列标识符或者mtype的值小于1;或者msgsz的值小于0或大于系统施加的限制。 E2BIG 接受的消息内容过长。 ENOMSGIPC_NOWAIT是在 msgflg 中指定的并且消息队列中不存在请求类型的消息。 九、测试 1、发送端源码 #include MyIpc.h #include FileOperate.h#define TEST_PATH_NAME /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Process/File2Key.txt #define TEST_PROJECT_ID 0Status main() {int RetMsgId -1;key_t RetKey -1;if (File2Key(TEST_PATH_NAME, TEST_PROJECT_ID, RetKey)){return FailFlag;}if (MessageGet(RetKey,0666|IPC_CREAT,RetMsgId) FailFlag){return FailFlag;}// if (MessageGet(0x0000000A,0666|IPC_CREAT,RetMsgId) FailFlag)// {// return FailFlag;// }MsgInfoSt* SendData (MsgInfoSt*)MyMalloc(sizeof(MsgInfoSt));SendData-MsgType 1;while (1){LogFormat(Debug,Send Data : );fgets(SendData-MsgInfo,MESSAGE_STR_MAX_SIZE,stdin);if (MessageSend(RetMsgId,SendData,0) FailFlag){free(SendData);SendData NULL;return FailFlag;}if (strncmp(SendData-MsgInfo,Finish,6) 0){break;}MySleep(1);}free(SendData);SendData NULL;return SuccessFlag; } 2、接收端源码 #include MyIpc.h #include FileOperate.h#define TEST_PATH_NAME /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Process/File2Key.txt #define TEST_PROJECT_ID 0Status main() {int RetMsgId -1;key_t RetKey -1;if (File2Key(TEST_PATH_NAME, TEST_PROJECT_ID, RetKey)){return FailFlag;}if (MessageGet(RetKey,0666|IPC_CREAT,RetMsgId) FailFlag){return FailFlag;}// if (MessageGet(0x0000000A,0666|IPC_CREAT,RetMsgId) FailFlag)// {// return FailFlag;// }MsgInfoSt* RecDaya (MsgInfoSt*)MyMalloc(sizeof(MsgInfoSt));RecDaya-MsgType 1;while (1){if (MessageRcv(RetMsgId,RecDaya,MESSAGE_STR_MAX_SIZE,1,0) FailFlag){free(RecDaya);RecDaya NULL;return FailFlag;}if (strncmp(RecDaya-MsgInfo,Finish,6) 0){break;}}free(RecDaya);RecDaya NULL;struct msqid_ds* QueueDesc (struct msqid_ds*)MyMalloc(sizeof(struct msqid_ds));if (MessageCtl(RetMsgId,IPC_STAT,QueueDesc) FailFlag)//获取消息队列相关信息{free(QueueDesc);QueueDesc NULL;return FailFlag;}PrintfMsgQueueIdDescInfo(QueueDesc,Debug);if (MessageCtl(RetMsgId,IPC_RMID,0) FailFlag)//关闭消息队列{free(QueueDesc);QueueDesc NULL;return FailFlag;}free(QueueDesc);QueueDesc NULL;return SuccessFlag; } 3、测试效果 1发送端会话 [gbaseczg2 Process]$ ./TestQueueSend 2023-12-15 14:42:26-P[95243]-T[0]-[Debug]-File2Key : OK, RetKey : c320. 2023-12-15 14:42:26-P[95243]-T[0]-[Debug]-MessageGet : OK. 2023-12-15 14:42:26-P[95243]-T[0]-[Debug]-Send Data : Sunshine 2023-12-15 14:42:29-P[95243]-T[0]-[Debug]-MessageSend : OK, MsgSize : 9, MsgType : 1, MsgInfo : Sunshine . 2023-12-15 14:42:30-P[95243]-T[0]-[Debug]-MySleep : OK, Seconds : 1. 2023-12-15 14:42:30-P[95243]-T[0]-[Debug]-Send Data : Moon 2023-12-15 14:42:38-P[95243]-T[0]-[Debug]-MessageSend : OK, MsgSize : 5, MsgType : 1, MsgInfo : Moon . 2023-12-15 14:42:39-P[95243]-T[0]-[Debug]-MySleep : OK, Seconds : 1. 2023-12-15 14:42:39-P[95243]-T[0]-[Debug]-Send Data : Finish 2023-12-15 14:42:43-P[95243]-T[0]-[Debug]-MessageSend : OK, MsgSize : 7, MsgType : 1, MsgInfo : Finish . 2接收端会话 [gbaseczg2 Process]$ ./TestQueueReceive 2023-12-15 14:41:46-P[95103]-T[0]-[Debug]-File2Key : OK, RetKey : c320. 2023-12-15 14:41:46-P[95103]-T[0]-[Debug]-MessageGet : OK. 2023-12-15 14:42:05-P[95103]-T[0]-[Debug]-MessageRcv : OK, MsgSize : 14, MsgType : 1, MsgInfo : 大unshine . 2023-12-15 14:42:13-P[95103]-T[0]-[Debug]-MessageRcv : OK, MsgSize : 7, MsgType : 1, MsgInfo : Finish . 2023-12-15 14:42:13-P[95103]-T[0]-[Debug]-MessageCtl : OK. 2023-12-15 14:42:13-P[95103]-T[0]-[Debug]-P MsgQidDesc : time of last msgsnd command : 1702622533 time of last msgrcv command : 1702622533 time of last change : 1702622501 current number of bytes on queue : 0 number of messages currently on queue : 0 max number of bytes allowed on queue : 16384 pid of last msgsnd() : 95070 pid of last msgrcv() : 95103 2023-12-15 14:42:13-P[95103]-T[0]-[Debug]-Decimal2Binary : OK, DecimalVal :438, RetBinary : 00000000000000000000000110110110. 2023-12-15 14:42:13-P[95103]-T[0]-[Debug]-P IpcPerm : Key : c320 Owners user ID : 1001 Owners group ID : 1001 Creators user ID : 1001 Creators group ID : 1001 Read/write permission : 00000000000000000000000110110110 Sequence number : 0 2023-12-15 14:42:13-P[95103]-T[0]-[Debug]-MessageCtl : OK.
http://www.yutouwan.com/news/403969/

相关文章:

  • 惠州城乡规划建设局网站高端网站开发价格
  • 在网站后台备案号怎么改wordpress英文模版
  • 做网站的服务器配置网站开发所有工具多大
  • 设计师做网站的流程个人电脑安装win2003做网站
  • 私人做网站的流程app制作教程课
  • 网站自动识别手机上海环球金融中心大厦简介
  • 网站建设前怎么可以自己制作网站
  • 如何做网站推广 求指点网站建设计
  • 潮州哪里有做网站wordpress订单管理插件
  • 北京的网站设计灵武网站建设
  • 网站定制开发成本网站 如何做 中英文切换
  • 网站改版Excel怎么做安徽建设信息网
  • 做网站的关键词怎么判断好不好无广告自助建站
  • 建设工程自学网站企业网站营销的实现方式
  • 网站项目运营方案青岛官网seo方法
  • 云浮+网站建设网站开发公司市场
  • 免费自助网站建设做网站推广方法
  • 网站建设优化推广教程html制作网站的步骤
  • 购物网站的建设意义wordpress安装不成功
  • 建网站跟建网店的区别花钱做网站需要所有权
  • 沈阳市城乡建设部官方网站app开发公司需要投资多少
  • 网站首页图怎么做中小企业有哪些
  • 网站自行备案在线捐款网站开发
  • 学校网站建设钉钉wordpress主题 大学
  • 需要注册的企业网站网站版面的美化原则
  • 网站建设文章博物馆网站建设说明
  • cgi--网站开发技术的雏形专业外贸平台推广
  • 全球排名前十网站教育网站建设市场分析计划书
  • 企业静态网站需要备案吗教育技术专业网站开发课程
  • 给自己公司做个网站东莞房价