| 函数逻辑报告 | 
| Source Code: ipc\msg.c | Create Date:2022-07-27 18:17:51 | 
| Last Modify:2020-03-17 22:56:56 | Copyright©Brick | 
| 首页 | 函数Tree | 
| 注解内核,赢得工具 | 下载SCCT | English | 
函数名称:do_msgrcv
函数原型:static long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgflg, long (*msg_handler)(void __user *, struct msg_msg *, size_t ))
返回类型:long
参数:
| 类型 | 参数 | 名称 | 
|---|---|---|
| int | msqid | |
| void __user * | buf | |
| size_t | bufsz | |
| long | msgtyp | |
| int | msgflg | |
| long (* | msg_handler | 
| 1081 | 如果msgflg按位与copy (not remove) all queue messages 则 | 
| 1082 | 如果msgflg按位与cv any msg except of specified type.或非msgflg按位与urn error on wait 的值则返回:负EINVAL | 
| 1088 | mode等于convert_mode( & msgtyp, msgflg) | 
| 1091 | msq等于msq_obtain_object_check(ns, msqid) | 
| 1092 | 如果是错误则 | 
| 1095 | 返回:错误 | 
| 1098 | 循环 | 
| 1105 | ipc_lock_object( & q_perm) | 
| 1110 | 转到:out_unlock0 | 
| 1114 | 如果非是错误则 | 
| 1119 | 如果bufsz小于message text size 且非msgflg按位与 error if message is too big 的值则 | 
| 1121 | 转到:out_unlock0 | 
| 1127 | 如果msgflg按位与copy (not remove) all queue messages 则 | 
| 1129 | 转到:out_unlock0 | 
| 1132 | 删除链表项 | 
| 1133 | umber of messages in queue 自减 | 
| 1135 | ipc_update_pid( & last receive pid , task_tgid(当前进程)) | 
| 1137 | atomic_sub(message text size , & msg_bytes) | 
| 1138 | atomic_dec( & msg_hdrs) | 
| 1141 | 转到:out_unlock0 | 
| 1145 | 如果msgflg按位与urn error on wait 则 | 
| 1147 | 转到:out_unlock0 | 
| 1150 | 添加链表项 | 
| 1154 | 如果msgflg按位与 error if message is too big 则r_maxsize等于INT_MAX | 
| 1161 | ipc_unlock_object( & q_perm) | 
| 1163 | 进程调度 | 
| 1187 | 如果msg不等于错误号则转到:out_unlock1 | 
| 1194 | ipc_lock_object( & q_perm) | 
| 1197 | 如果msg不等于错误号则转到:out_unlock0 | 
| 1200 | 删除链表项 | 
| 1201 | 如果signal_pending(当前进程)则 | 
| 1203 | 转到:out_unlock0 | 
| 1206 | ipc_unlock_object( & q_perm) | 
| 1209 | out_unlock0 : | 
| 1210 | ipc_unlock_object( & q_perm) | 
| 1212 | out_unlock1 : | 
| 1214 | 如果是错误则 | 
| 1219 | bufsz等于msg_handler(buf, msg, bufsz) | 
| 1222 | 返回:bufsz | 
| 名称 | 描述 | 
|---|---|
| ksys_msgrcv | |
| compat_ksys_msgrcv | 
| 源代码转换工具 开放的插件接口 | X | 
|---|---|
| 支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |