函数 | |
mqd_t | SysMqOpen (const char *mqName, int openFlag, mode_t mode, struct mq_attr *attr) |
打开一个消息队列,由posix接口封装 更多... | |
int | SysMqClose (mqd_t personal) |
关闭一个消息队列 更多... | |
int | SysMqNotify (mqd_t personal, const struct sigevent *sigev) |
int | SysMqGetSetAttr (mqd_t mqd, const struct mq_attr *new, struct mq_attr *old) |
封装posix的标准接口,获取和设置消息队列的属性 更多... | |
int | SysMqUnlink (const char *mqName) |
int | SysMqTimedSend (mqd_t personal, const char *msg, size_t msgLen, unsigned int msgPrio, const struct timespec *absTimeout) |
定时时间发送消息,任务将被阻塞,等待被唤醒写入消息 更多... | |
ssize_t | SysMqTimedReceive (mqd_t personal, char *msg, size_t msgLen, unsigned int *msgPrio, const struct timespec *absTimeout) |
定时接收消息,任务将被阻塞,等待被唤醒读取 更多... | |
int | SysSigAction (int sig, const sigaction_t *restrict sa, sigaction_t *restrict old, size_t sigsetsize) |
注册信号,鸿蒙内核只捕捉了SIGSYS 信号 更多... | |
int | SysSigprocMask (int how, const sigset_t_l *restrict setl, sigset_t_l *restrict oldl, size_t sigsetsize) |
系统调用之进程信号屏蔽, 什么意思?简单说就是 一个信号来了进程要不要处理,屏蔽就是不处理,注意不能屏蔽SIGKILL和SIGSTOP信号,必须要处理. 更多... | |
int | SysKill (pid_t pid, int sig) |
系统调用之向进程发送信号 更多... | |
int | SysPthreadKill (pid_t pid, int sig) |
系统调用之之向进程发送信号 更多... | |
int | SysSigTimedWait (const sigset_t_l *setl, siginfo_t *info, const struct timespec *timeout, size_t sigsetsize) |
int | SysPause (void) |
系统调用之暂停任务 更多... | |
int | SysSigPending (sigset_t_l *setl) |
获取阻塞当前任务的信号集 更多... | |
int | SysSigSuspend (sigset_t_l *setl) |
int | SysMkFifo (const char *pathName, mode_t mode) |
在文件 ipc_syscall.c 第 389 行定义.
封装posix的标准接口,获取和设置消息队列的属性
mqd | |
new | 判断是否是获取还是设置功能,new==null 获取 否则为设置 |
old |
在文件 ipc_syscall.c 第 138 行定义.
打开一个消息队列,由posix接口封装
IPC(Inter-Process Communication,进程间通信) 每个进程各自有不同的用户地址空间,进程之间地址保护,相互隔离,任何一个进程的信息在另一个进程中都看不到, 所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区, 进程B再从内核缓冲区把数据读走, IPC实现方式之消息队列: 消息队列特点总结: (1)消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识. (2)消息队列允许一个或多个进程向它写入与读取消息. (3)管道和消息队列的通信数据都是先进先出的原则。 (4)消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO更有优势。 (5)消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。 (6)目前主要有两种类型的消息队列:POSIX消息队列以及System V消息队列,System V消息队列是随内核持续的, 只有在内核重起或者人工删除时,该消息队列才会被删除。 鸿蒙liteos 支持POSIX消息队列并加入了一种自研的消息队列 liteipc,此处重点讲 posix消息队列 *
mqName | |
openFlag | |
mode | |
attr |
在文件 ipc_syscall.c 第 87 行定义.
ssize_t SysMqTimedReceive | ( | mqd_t | personal, |
char * | msg, | ||
size_t | msgLen, | ||
unsigned int * | msgPrio, | ||
const struct timespec * | absTimeout | ||
) |
定时接收消息,任务将被阻塞,等待被唤醒读取
在文件 ipc_syscall.c 第 230 行定义.
int SysMqTimedSend | ( | mqd_t | personal, |
const char * | msg, | ||
size_t | msgLen, | ||
unsigned int | msgPrio, | ||
const struct timespec * | absTimeout | ||
) |
定时时间发送消息,任务将被阻塞,等待被唤醒写入消息
在文件 ipc_syscall.c 第 195 行定义.
int SysMqUnlink | ( | const char * | mqName | ) |
从内核中删除名为mqName的消息队列 如果该函数被调用了,但是仍然有进程已经打开了这个消息队列,那么这个消息队列 的销毁会被推迟到所有的引用都被关闭时执行.并且函数 mq_unlink() 不需要阻塞 到所有的引用都被关闭为止,它会立即返回.函数 mq_unlink()调用成功后, 如果在 随后调用 mq_open() 时重用这个消息队列名字,效果就像这个名字的消息队列不存在, 如果没有设置O_CREAT标志,函数mq_open() 会返回失败,否则会创建一个新的消息队列. *
mqName |
在文件 ipc_syscall.c 第 176 行定义.
int SysSigAction | ( | int | sig, |
const sigaction_t *restrict | sa, | ||
sigaction_t *restrict | old, | ||
size_t | sigsetsize | ||
) |
注册信号,鸿蒙内核只捕捉了SIGSYS 信号
在文件 ipc_syscall.c 第 274 行定义.
int SysSigPending | ( | sigset_t_l * | setl | ) |
获取阻塞当前任务的信号集
在文件 ipc_syscall.c 第 355 行定义.
int SysSigprocMask | ( | int | how, |
const sigset_t_l *restrict | setl, | ||
sigset_t_l *restrict | oldl, | ||
size_t | sigsetsize | ||
) |
系统调用之进程信号屏蔽, 什么意思?简单说就是 一个信号来了进程要不要处理,屏蔽就是不处理,注意不能屏蔽SIGKILL和SIGSTOP信号,必须要处理.
how | SIG_BLOCK 加入信号到进程屏蔽。set包含了希望阻塞的附加信号 SIG_UNBLOCK 从进程屏蔽里将信号删除。set包含了希望解除阻塞的信号 SIG_SETMASK 将set的值设定为新的进程屏蔽 |
setl | |
oldl | |
sigsetsize |
在文件 ipc_syscall.c 第 290 行定义.
int SysSigSuspend | ( | sigset_t_l * | setl | ) |
在文件 ipc_syscall.c 第 375 行定义.
int SysSigTimedWait | ( | const sigset_t_l * | setl, |
siginfo_t * | info, | ||
const struct timespec * | timeout, | ||
size_t | sigsetsize | ||
) |
在文件 ipc_syscall.c 第 312 行定义.