gqmes的mes中文什么意思是什么

消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。信号这种通信方式更像\"即时\"的通信方式,它要求接受信号的进程在某个时间范围内对信号做出反应,因此该信号最多在接受信号进程的生命周期内才有意义,信号所传递的信息是接近于随进程持续的概念(process-persistent);管道及有名管道则是典型的随进程持续IPC,并且,只能传送无格式的字节流无疑会给应用程序开发带来不便,另外,它的缓冲区大小也受到限制消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。

mq_open() 创建一个新的 POSIX 消息队列或打开一个存在的队列。这个队列使用 name 标识。每个消息队列都通过形如/somename 的名字来区分,这是一个包含起始斜杠在内的最大长度不超过 NAME_MAX(如 225)的以空字符结尾的字符串,在起始斜杠之后不允许再有斜杠。

O_RDONLY 以只能收取消息的方式打开队列。 O_WRONLY 以只能发送消息的方式打开的队列。 O_RDWR 以可发送也可收取消息的方式打开队列。

ID)被设置为调用进程的有效用名 ID。组属性(组 ID)被设置为调用进程的有效组 ID。 O_EXCL

NULL,队列将使用实现定义的默认属性来创建。

了解限制的更多细节。) EMFILE 进程已经达到打开的文件和消息队列的最大数目。 ENAMETOOLONG name 太长了。 ENFILE 达到系统允许打开文件个数和消息队列的全局上限。

如果调用进程在消息队列 mqdes 绑定了通知请求,那么这个请求被删除,此后其它进程就可以绑定通知请求到此消息队列。

mq_curmsgs 域用于返回当前队列里已经有消息个数。

描述mq_notify() 允许调用进程针对 mqdes 引用的空队列注册或注销新消息异步通知的递送。

对于一个消息队列只能有一个进程可以注册到达通知。

如果 sevp 是 NULL,并且调用进程当前已经在相应的队列里注册过通知,则这个注册被删除;此后其它进程就可以注册到这个队列里以接收通知。

消息通知只有在一个新消息到达且之前队列是空的情况下被递送。如果 mq_notify() 调用时队列非空,则通知会在队列变空之后且有新消息到达时递送。

如果其它进程或线程正在通过 mq_receive(3) 等待一个空队列的消息到达,则任何新到达的消息都被忽略:这些消息会传递给调用mq_receive(3) 进程或线程,而消息通知注册仍然有效。

通知只发生一次:在一个通知递送之后,这个通知注册会被删除,并且其它进程可以注册一个通知。如果收到消息的进程想接收下一个通知,它可能使用 mq_notify() 请求一个全新通知。这可以在所有未读消息被收到完之前来执行。(此时把队列设置非阻塞模式会很有用,在清空队列消息的时候而不用担心一旦队列变空之后被阻塞。)

msg_prio 是一个用于指定消息优先级的非负整数。消息在队列里依据优先级排序,相同优先级的消息新消息放于旧消息后面。

如果消息队列已经满了(如当前队列消息个数等于队列的 mq_maxmsg 属性),那么,默认地,mq_send() 会一直阻塞到有足够的空间来把当前消息入队,或者在阻塞的时候被一个信号处理器中断。如果 O_NONBLOCK 标志在消息队列描述符里有设置,那么调用将直接由 EAGAIN 错误返回。

00:00:00 +0000 (UTC) 开始的绝对的秒和纳秒数指定超时,它的结构定义如下:

如果消息队列满,并且调用时超时设置已经达到,mq_timedsend() 立刻返回。

NULL,那么它指向的内存用于返回收到消息相关的优先级。

如果队列是空的,默认情况下,mq_receive() 会阻塞到有消息准备好为止,或者被信号处理器中断为止。如果消息队列描述符的O_NONBLOCK 标志启用,则调用会以错误 EAGAIN 立即返回。

很相似,只不过当队列是空且 O_NONBLOCK 标志没有针对相应消息队列描述符启用时,调用会阻塞到 abs_timeout 时间点时返回。这个软上限是一个绝对的时刻值,它计算从 Epoch 00:00:00 +0000 (UTC) 开始的秒数和纳秒数,这个结构的定义如下:

描述mq_unlink() 删除名为 name 的消息队列。消息队列名将被直接删除。消息队列本身在所有引用这个队列的描述符被关闭时销毁。 返回值成功时 mq_unlink() 返回0;错误时,返回 消息队列允许进程以消息的形式交换数据。这组 API 与 System V

创建和打开,这个函数返回一个 消息队列描述符 (mqd_t),它将在之后调用中被用于引用那个打开的消息队列。每个消息队列都通过形如 /somename 的名字来区分,这是一个包含起始斜杠在内的最大长度不超过 NAME_MAX(如 225)的以空字符结尾的字符串,在起始斜杠之后不允许再有斜杠。两个进程可能通过在使用 mq_open(3) 时传递相同的名字来打开相同的消息队列。

来取得和更改(在一些情况下)。一个进程可以使用 mq_notify(3) 在一个空的队列时请求异步的卡片消息到达通知。

之后,子进程继承了父亲消息队列描述符的复本,并且这些描述符引用与父亲中相应描述符相同消息队列打开描述符。在两个进程里相关描述符共享消息队列打开描述符相关的标志位(mq_flags)。

只要求实现提供优先级范围 0 到 31;一些实现只提供了这个范围。

消息队列是内核生命期的;如果没有使用mq_unlink(3) 删除的话,一个消息队列会一直存在,直到系统关闭。 链接使用 POSIX 消息队列 API 的程序必须在链接的时候加入选项cc -lrt 来链接实时库,librt。 /proc 接口下列接口可以用于限制 POSIX 消息队列消耗的内存数目: 的任何值。资源限制RLIMIT_MSGQUEUE 是一个资源限制值,它限制进程真实 UID 可以用于消息的最大内存数目。在 getrlimit(2) 中有详细说明。 挂载消息队列文件系统在 Linux 系统里,已创建的消息队列在一个虚拟的文件系统里。(其它实现可能也提供类似的特性,但具体细节可能不同。)这个文件系统可以(被超级用户)使用下面命令挂载: # mkdir /dev/mqueue # mount -t mqueue none

一旦这个文件系统被挂载,系统里的消息队列就可以使用大家熟悉的命令(如 ls(1) 和 rm(1))来查看和维护了。

目录里的每一个文件都只包含相应队列信息一行内容:

这些域的含意如下: QSIZE 队列里所有消息的总字节数 NOTIFY_PID 如果这不是零,那么 进程号为 PID 进程已经使用 mq_notify(3) 来注册异步消息通知,并且剩余的域用来描述通知如何发出。 NOTIFY 通知方式:0 是 SIGEV_SIGNAL;1 里,一个消息队列描述符是一个真实的文件描述符,冻僵可以使用 select(2)、poll(2) 或 epoll(7) 来监视。这不具移植性。

创建和打开,这个函数返回一个 消息队列描述符 (mqd_t),它将在之后调用中被用于引用那个打开的消息队列。每个消息队列都通过形如 /somename 的名字来区分,这是一个包含起始斜杠在内的最大长度不超过 NAME_MAX(如 225)的以空字符结尾的字符串,在起始斜杠之后不允许再有斜杠。两个进程可能通过在使用 mq_open(3) 时传递相同的名字来打开相同的消息队列。

来取得和更改(在一些情况下)。一个进程可以使用 mq_notify(3) 在一个空的队列时请求异步的卡片消息到达通知。

之后,子进程继承了父亲消息队列描述符的复本,并且这些描述符引用与父亲中相应描述符相同消息队列打开描述符。在两个进程里相关描述符共享消息队列打开描述符相关的标志位(mq_flags)。

只要求实现提供优先级范围 0 到 31;一些实现只提供了这个范围。

 来控制。这个选项在默认是打开的。 生命期(持续性)POSIX 消息队列是内核生命期的;如果没有使用

(3) 删除的话,一个消息队列会一直存在,直到系统关闭。 链接使用 POSIX 消息队列 API 的程序必须在链接的时候加入选项

 来链接实时库,

。 /proc 接口下列接口可以用于限制 POSIX 消息队列消耗的内存数目: /proc/sys/fs/mqueue/msg_max 这个文件可以用于查看和更改队列里缓存的软最大消息数目。这个值是 

)进程忽略。 /proc/sys/fs/mqueue/queues_max 这个文件可以用于查看和更改系统范围内的消息队列个数的限制。一旦这个限制达到了,只有特权进程(

 的默认值是 256,它可以被更改为 0 到 INT_MAX 的任何值。资源限制

 是一个资源限制值,它限制进程真实 UID 可以用于消息的最大内存数目。在 

(2) 中有详细说明。 挂载消息队列文件系统在 Linux 系统里,已创建的消息队列在一个虚拟的文件系统里。(其它实现可能也提供类似的特性,但具体细节可能不同。)这个文件系统可以(被超级用户)使用下面命令挂载: #

 粘滞位会自动在挂载的目录打开。

一旦这个文件系统被挂载,系统里的消息队列就可以使用大家熟悉的命令(如 ls(1) 和 rm(1))来查看和维护了。

目录里的每一个文件都只包含相应队列信息一行内容:

(3) 来注册异步消息通知,并且剩余的域用来描述通知如何发出。 NOTIFY 通知方式:0 是 

 方式所使用信号数字。轮询消息队列描述符在 Linux 里,一个消息队列描述符是一个真实的文件描述符,冻僵可以使用 

(2) 等等)是一组老的用于进程交互消息的 API 。POSIX 消息队列提供了一组优于 System V 消息队列的接口设计;另一方面 POSIX 消息队列又不如 System V 消息队列受到的支持程度好(尤其是老的系统里)。

如果创建了消息,则参数 msgflg 有意义的最后几个位定义了消息队列的权限。这些权限位的格式与语义同open(2) 中的 mode参数相同。(执行权限没有使用。)

如果一个消息队列已经存在并且权限认证通过,则会额外查看一下队列是不是被标志为释放。

返回值如果成功,返回值将是消息队列标识符(一个非负整数),否则的话 -1 被返回并设置 errno 来指明错误。错误如果失败,errno 可能被设置为如下值:EACCES已经有一个关联于 key 的消息队列,但是调用进程没有对这个队列的访问权限,同时这个进程没有CAP_IPC_OWNER 特权。

ENOMEM必需创建一个消息队列但系统没有足够的内存来建立相应的数据结构。

ENOSPC必需创建一个消息队列但是系统允许的最大消息队列个数(MSGMNI) 已经达到。遵循于SVr4,

msqid:消息队列的识别码。
msgp:指向消息缓冲区的指针,此位置用来暂时存储发送和接收的消息,是一个用户可定义的通用结构,形态如下

msgsz:消息的大小。
msgtyp:从消息队列内读取的消息形态。如果值为零,则表示消息队列中的所有消息都会被读取。
msgflg:用来指明核心程序在队列没有数据的情况下所应采取的行动。如果msgflg和常数IPC_NOWAIT合用,则在msgsnd()执行时若是消息队列已满,则msgsnd()将不会阻塞,而会立即返回-1,如果执行的是msgrcv(),则在消息队列呈空时,不做等待马上返回-1,并设定错误码为ENOMSG。当msgflg为0时,msgsnd()及msgrcv()在队列呈满或呈空的情形时,采取阻塞等待的处理模式。


成功执行时,msgsnd()返回0,msgrcv()返回拷贝到mtext数组的实际字节数。失败两者都返回-1,errno被设为以下的某个值
EACCES:调用进程在消息队列上没有写权能,同时没有CAP_IPC_OWNER权能
EFAULT:msgp指针指向的内存空间不可访问
EIDRM:消息队列已被删除
EINTR:等待消息队列空间可用时被信号中断
ENOMEM:系统内存不足,无法将msgp指向的消息拷贝进来
EIDRM:当进程睡眠等待接收消息时,消息已被删除
EINTR:当进程睡眠等待接收消息时,被信号中断
}

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

错误拼写。应该是games(游戏,复数形式)

}

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

错误拼写。应该是games(游戏,复数形式)

}

我要回帖

更多关于 mes中文什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信