中国最有名的网站建设公司,wordpress 合同,html所有标签及其属性汇总,制作网页可以有效控制什么的位置消息队列#xff1a;1、基于内核实现#xff0c;必须在内核空间创建消息队列#xff1b;2、消息队列中的消息由类型和正文组成#xff1b;3、消息队列的默认大小为16KB#xff1b;运行过程#xff1a;1、进程1将消息写入到消息队列#xff0c;进程2根据消息的类型从消息…消息队列1、基于内核实现必须在内核空间创建消息队列2、消息队列中的消息由类型和正文组成3、消息队列的默认大小为16KB运行过程1、进程1将消息写入到消息队列进程2根据消息的类型从消息队列中取得对应的消息2、进程1向消息队列中发送消息可以采用阻塞或者非阻塞的方式3、进程2从消息队列中收取消息也可以采用阻塞或者非阻塞的方式常用的接口函数msgget函数功能创建或者获取一个消息队列; #include sys/types.h#include sys/ipc.h#include sys/msg.hint msgget(key_t key, int msgflg);/*参数key 键值key 通过ftok获取的IPC_PRIVATE 表示只有亲缘进程间能只用msgflg消息队列的标志位IPC_CREAT|0666 或者 IPC_CREAT|IPC_EXCL|0666 返回值成功 消息队列的id失败 -1 重置错误码*/msgsnd函数功能向消息队列中写入一条消息 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);/*参数msqid消息队列的idmsgp 要写入的数据的首地址msgsz消息正文的大小msgflg标志位 0 阻塞发送 IPC_NOWAIT 非阻塞发送返回值成功 0失败 -1 重置错误码*/struct msgbuf {long mtype; /* 消息的类型 必须大于 0 */char mtext[1]; /* 消息正文 可以自定义 */};msgrcv函数功能在消息队列中读取一条消息 ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);/*参数msqid消息队列的idmsgp 用来保存接收的数据的缓冲区的首地址msgsz消息正文的大小msgtyp要接受的消息的类型0 接收消息队列中第一条消息0 接收指定类型的第一条消息0 :一般不使用表示接收消息队列中第一条类型最小的小于msgtyp的绝对值的消息3-2-5-500-200-8读取时类型传 -200读取的顺序 2-3-5 msgflg标志位 0 阻塞接收 IPC_NOWAIT 非阻塞接收返回值成功 实际读到的正文的字节数失败 -1 重置错误码*/struct msgbuf {long mtype; /* 消息的类型 必须大于 0 */char mtext[1]; /* 消息正文 可以自定义 */};msgctl函数功能控制消息队列 int msgctl(int msqid, int cmd, struct msqid_ds *buf);/*参数msqid消息队列idcmd指令IPC_STAT获取消息队列的属性IPC_SET设置消息队列的属性IPC_RMID立即删除消息队列只有消息队列的创建者和所有者以及root用户可以删除消息队列msgctl函数的第三个参数被忽略buff返回值成功 0失败 -1 重置错误码*/获取和设置消息队列的属性属性结构体 struct msqid_ds {struct ipc_perm msg_perm; /* IPC权限结构体 */time_t msg_stime; /* 最后一次执行msgsnd的时间 */time_t msg_rtime; /* 最后一次执行msgrcv的时间 */time_t msg_ctime; /* 最后一次被修改的时间 */unsigned long __msg_cbytes; /* 当前消息队列中的字节数 */msgqnum_t msg_qnum; /* 当前消息队列中的消息数 */msglen_t msg_qbytes; /* 允许的最大字节数 */pid_t msg_lspid; /* 最后一次执行msgsnd的进程的PID */pid_t msg_lrpid; /* 最后一次执行msgrcv的进程的PID */};struct ipc_perm {key_t __key; /* 键值 */uid_t uid; /* 所属用户的id */gid_t gid; /* 所属用户的组id */uid_t cuid; /* 创建者的id */gid_t cgid; /* 创建者的组id */unsigned short mode; /* 权限 */};
共享内存1、同样在内核中创建共享内存2、进程1和进程2都能够访问到通过这段内存空间进行数据的传递3、共享内存是所有进程间通信方式中效率最高的不需要在内核中往返进行拷贝4、共享内存的内存空间大小是4KB的整数倍信号灯集1、实现进程同步的机制2、在一个信号灯集中可以有很多信号灯3、这些信号灯集中的信号灯相互独立每个灯的值的改变都不会影响到其他的信号灯4、信号灯的值一般设置为二值量即0或者1其中0代表没有资源1代表有资源