44#define MQUEUE_FD_U2K(id) \
46 int sysFd = GetAssociatedSystemFd((INTPTR)(id)); \
47 (id) = (mqd_t)sysFd; \
49#define MQUEUE_FD_K2U(id) \
51 int procFd = AllocAndAssocProcessFd((INTPTR)(id), MIN_START_FD); \
55 (id) = (mqd_t)(-EMFILE); \
57 (id) = (mqd_t)procFd; \
91 char kMqName[PATH_MAX + 1] = { 0 };
97 ret =
mq_open(kMqName, openFlag, mode, attr);
99 return (
mqd_t)-get_errno();
109 int ufd = (
INTPTR)personal;
111 MQUEUE_FD_U2K(personal);
123 MQUEUE_FD_U2K(personal);
150 ret =
mq_getsetattr(mqd,
new ? &knew : NULL, old ? &kold : NULL);
180 char kMqName[PATH_MAX + 1] = { 0 };
196 const struct timespec *absTimeout)
199 struct timespec timeout;
200 char *msgIntr = NULL;
202 if (absTimeout != NULL) {
211 msgIntr = (
char *)
malloc(msgLen);
212 if (msgIntr == NULL) {
220 MQUEUE_FD_U2K(personal);
221 ret =
mq_timedsend(personal, msgIntr, msgLen, msgPrio, absTimeout ? &timeout : NULL);
231 const struct timespec *absTimeout)
234 struct timespec timeout;
235 char *msgIntr = NULL;
236 unsigned int kMsgPrio;
238 if (absTimeout != NULL) {
247 msgIntr = (
char *)
malloc(msgLen);
248 if (msgIntr == NULL) {
251 MQUEUE_FD_U2K(personal);
252 receiveLen =
mq_timedreceive(personal, msgIntr, msgLen, &kMsgPrio, absTimeout ? &timeout : NULL);
253 if (receiveLen < 0) {
258 if (msgPrio != NULL) {
318 struct timespec timeoutIntr;
325 if (timeout == NULL) {
326 tick = LOS_WAIT_FOREVER;
347 return (ret == 0 ? infoIntr.si_signo : ret);
388#ifdef LOSCFG_KERNEL_PIPE
392 char kPathName[PATH_MAX + 1] = { 0 };
398 return mkfifo(kPathName, mode);
int mq_getsetattr(mqd_t personal, const struct mq_attr *mqSetAttr, struct mq_attr *MqOldAttr)
mqd_t mq_open(const char *mqName, int openFlag,...)
int mq_close(mqd_t personal)
int mq_timedsend(mqd_t personal, const char *msg, size_t msgLen, unsigned int msgPrio, const struct timespec *absTimeout)
int mq_unlink(const char *mqName)
ssize_t mq_timedreceive(mqd_t personal, char *msg, size_t msgLen, unsigned int *msgPrio, const struct timespec *absTimeout)
int SysSigTimedWait(const sigset_t_l *setl, siginfo_t *info, const struct timespec *timeout, size_t sigsetsize)
int SysPthreadKill(pid_t pid, int sig)
系统调用之之向进程发送信号
int SysPause(void)
系统调用之暂停任务
int SysMkFifo(const char *pathName, mode_t mode)
mqd_t SysMqOpen(const char *mqName, int openFlag, mode_t mode, struct mq_attr *attr)
打开一个消息队列,由posix接口封装
int SysSigSuspend(sigset_t_l *setl)
int SysKill(pid_t pid, int sig)
系统调用之向进程发送信号
int SysMqUnlink(const char *mqName)
int SysSigAction(int sig, const sigaction_t *restrict sa, sigaction_t *restrict old, size_t sigsetsize)
注册信号,鸿蒙内核只捕捉了SIGSYS 信号
int SysSigPending(sigset_t_l *setl)
获取阻塞当前任务的信号集
int SysMqNotify(mqd_t personal, const struct sigevent *sigev)
int SysMqTimedSend(mqd_t personal, const char *msg, size_t msgLen, unsigned int msgPrio, const struct timespec *absTimeout)
定时时间发送消息,任务将被阻塞,等待被唤醒写入消息
int SysMqGetSetAttr(mqd_t mqd, const struct mq_attr *new, struct mq_attr *old)
封装posix的标准接口,获取和设置消息队列的属性
int SysMqClose(mqd_t personal)
关闭一个消息队列
int SysSigprocMask(int how, const sigset_t_l *restrict setl, sigset_t_l *restrict oldl, size_t sigsetsize)
系统调用之进程信号屏蔽, 什么意思?简单说就是 一个信号来了进程要不要处理,屏蔽就是不处理,注意不能屏蔽SIGKILL和SIGSTOP信号,必须要处理.
ssize_t SysMqTimedReceive(mqd_t personal, char *msg, size_t msgLen, unsigned int *msgPrio, const struct timespec *absTimeout)
定时接收消息,任务将被阻塞,等待被唤醒读取
int OsPause(void)
通过信号挂起当前任务
int OsSigAction(int sig, const sigaction_t *act, sigaction_t *oact)
int OsSigprocMask(int how, const sigset_t_l *set, sigset_t_l *oldset)
int OsPthreadKill(UINT32 tid, int signo)
发送信号
int OsKillLock(pid_t pid, int sig)
给发送信号过程加锁
int OsSigPending(sigset_t *set)
获取阻塞当前任务的信号集
struct sigaction sigaction_t
int OsSigSuspend(const sigset_t *set)
用参数set代替进程的原有掩码,并暂停进程执行,直到收到信号再恢复原有掩码并继续执行进程。
int OsSigTimedWait(sigset_t *set, siginfo_t *info, unsigned int timeout)
让当前任务等待的信号
void * malloc(size_t size)
动态分配内存块大小
void free(void *ptr)
释放ptr所指向的内存空间
int OsMqNotify(mqd_t personal, const struct sigevent *sigev)
INT32 LOS_StrncpyFromUser(CHAR *dst, const CHAR *src, INT32 count)
unsigned long sig[MAX_SIG_ARRAY_IN_MUSL/sizeof(unsigned long)]
ARG_NUM_3 ARG_NUM_1 ARG_NUM_2 ARG_NUM_2 ARG_NUM_3 ARG_NUM_1 ARG_NUM_4 ARG_NUM_2 ARG_NUM_2 ARG_NUM_5 ARG_NUM_2 ARG_NUM_0 ARG_NUM_2 ARG_NUM_1 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_4 ARG_NUM_5 ARG_NUM_6 ARG_NUM_3 ARG_NUM_5 ARG_NUM_7 ARG_NUM_1 ARG_NUM_4 ARG_NUM_5 ARG_NUM_4 ARG_NUM_7 ARG_NUM_2 ARG_NUM_3 ARG_NUM_7 ARG_NUM_7 ARG_NUM_3 ARG_NUM_3 ARG_NUM_3 ARG_NUM_7 ARG_NUM_3 ARG_NUM_2 char ARG_NUM_2 ARG_NUM_1 ARG_NUM_0 ARG_NUM_0 ARG_NUM_3 void ARG_NUM_1 ARG_NUM_0 unsigned ARG_NUM_0 ARG_NUM_2 ARG_NUM_3 ARG_NUM_2 ARG_NUM_5 ARG_NUM_3 ARG_NUM_3 ARG_NUM_4 ARG_NUM_1 ARG_NUM_1 ARG_NUM_3 ARG_NUM_2 mode_t
STATIC INLINE BOOL ValidTimeSpec(const struct timespec *tp)
STATIC INLINE UINT32 OsTimeSpec2Tick(const struct timespec *tp)
size_t LOS_ArchCopyToUser(void *dst, const void *src, size_t len)
从内核空间拷贝到用户空间
size_t LOS_ArchCopyFromUser(void *dst, const void *src, size_t len)
void FreeProcessFd(int procFd)
释放进程文件描述符