Skip to content

Commit 23d1e03

Browse files
add
1 parent 00a6506 commit 23d1e03

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

lec10/p1-ipcoverview.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -418,16 +418,34 @@ int msgrcv(int msgid, void *msg_ptr, size_t msgsz,long int msgtype, int msgflg)
418418

419419

420420
---
421-
#### 消息队列控制
421+
#### 消息队列控制:查询队列状态、修改权限、删除队列等
422422
```
423423
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
424424
```
425425
- 消息队列的属性保存在系统维护的数据结构msqid_ds中,可以通过函数msgctl获取或设置消息队列的属性。
426426
- msgctl:对msgqid标识的消息队列执行cmd操作,3种cmd操作:
427427
- IPC_STAT:获取消息队列对应的msqid_ds数据结构(保存到buf)
428-
- IPC_SET:设置消息队列的属性,存储在buf中,包括:msg_perm.uid、 msg_perm.gid、msg_perm.mode、msg_qbytes
428+
- IPC_SET:修改消息队列的属性(存储在buf中,包括:msg_perm.uid、 msg_perm.gid、msg_perm.mode、msg_qbytes
429429
- IPC_RMID:从内核中删除msgqid标识的消息队列
430430
- buf是指向msgid_ds结构的指针,指向消息队列模式和访问权限
431+
432+
433+
---
434+
#### 消息队列
435+
```
436+
struct msqid_ds {
437+
struct ipc_perm msg_perm; // 权限信息
438+
time_t msg_stime; // 最后发送消息的时间(单位:秒,从 1970-01-01 起)
439+
time_t msg_rtime; // 最后接收消息的时间
440+
time_t msg_ctime; // 最后修改队列的时间(如 IPC_SET、IPC_RMID)
441+
unsigned long msg_cbytes;// 当前队列中的字节数
442+
msgqnum_t msg_qnum; // 当前队列中的消息数量
443+
msglen_t msg_qbytes; // 队列允许的最大字节数
444+
pid_t msg_lspid; // 最后发送消息的进程 PID
445+
pid_t msg_lrpid; // 最后接收消息的进程 PID
446+
};
447+
```
448+
431449
---
432450
#### 消息队列[示例程序](https://gitee.com/chyyuu/os-usrapp-lab/blob/main/c/ipc/message-queues/ex1.c)
433451
```
@@ -477,7 +495,7 @@ Child: read msg:test
477495
- shmget( key, size, flags) //创建共享段
478496
- shmat( shmid, *shmaddr, flags) //把共享段映射到进程地址空间
479497
- shmdt( *shmaddr)//取消共享段到进程地址空间的映射
480-
- shmctl(shmid, cmd, shmid_ds *buf) //共享段控制
498+
- shmctl(shmid, cmd, shmid_ds *buf) //控制共享段
481499

482500
注:需要信号量等同步机制协调共享内存的访问冲突
483501

0 commit comments

Comments
 (0)