mq_getattr.c

来自「Newlib 嵌入式 C库 标准实现代码」· C语言 代码 · 共 53 行

C
53
字号
/* Copyright 2002, Red Hat Inc. */#include <mqueue.h>#include <errno.h>#include <sys/sem.h>#include <string.h>#define _LIBC 1#include <sys/lock.h>#undef _LIBC#include "mqlocal.h"intmq_getattr (mqd_t msgid, struct mq_attr *mqstat){  struct libc_mq *info;  struct sembuf sb0 = {0, -1, 0};  int num_msgs;  int rc = 0;  info = __find_mq (msgid);  if (info == NULL)    {      errno = EBADF;      return -1;    }  /* temporarily lock message queue */  semop (info->semid, &sb0, 1);  num_msgs = semctl (info->semid, 3, GETVAL);  if (num_msgs >= 0)    {      memcpy (mqstat, info->attr, sizeof(struct mq_attr));      mqstat->mq_curmsgs = num_msgs;    }  else    rc = -1;  /* release message queue */  sb0.sem_op = 1;  semop (info->semid, &sb0, 1);  return rc;}      

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?