|
|
1.1 ! root 1: ! 2: ! 3: msgrcv() COHERENT System Call msgrcv() ! 4: ! 5: ! 6: ! 7: ! 8: Receive a message ! 9: ! 10: #include <sys/msg.h> ! 11: mmssggrrccvv(_m_s_q_i_d, _m_s_g_p, _m_s_g_s_z, _m_s_g_t_y_p, _m_s_g_f_l_g) ! 12: iinntt _m_s_q_i_d, _m_s_g_s_z, _m_s_g_f_l_g; ssttrruucctt mmssggbbuuff *_m_s_g_p; lloonngg _m_s_g_t_y_p; ! 13: ! 14: msgrcv reads a message from the queue associated with the queue ! 15: identifier msqid and writes it in the structure pointed to by ! 16: msgp. This structure consists of the following members: ! 17: ! 18: ! 19: long mtype; /* message type */ ! 20: char mtext[]; /* message text */ ! 21: ! 22: ! 23: mtype is the received message's type, as specified by the sending ! 24: process. mtext is the text of the message. msgsz gives the size ! 25: of mtext, in bytes. The received message is truncated to msgsz ! 26: bytes if it is larger than msgsz and (_m_s_g_f_l_g & MMSSGG_NNOOEERRRROORR) is ! 27: true. The truncated portion of the message is lost, with no in- ! 28: dication given to the calling process. ! 29: ! 30: msgtyp specifies the type of message requested, as follows: ! 31: ! 32: * If msgtyp equals 0L, the first message on the queue is ! 33: received. ! 34: ! 35: * If msgtyp is greater than 0L, the first message of type msgtyp ! 36: is received. ! 37: ! 38: * If msgtyp is less than 0L, the first message of the lowest ! 39: type that is less than or equal to the absolute value of ! 40: msgtyp is received. ! 41: ! 42: msgflg specifies the action taken if a message of the desired ! 43: type is not on the queue, as follows: ! 44: ! 45: * If (_m_s_g_f_l_g & IIPPCC_NNOOWWAAIITT) is true, the calling process im- ! 46: mediately returns -1 and sets errno to ENOMSG. ! 47: ! 48: * If (_m_s_g_f_l_g & IIPPCC_NNOOWWAAIITT) is false, the calling process ! 49: suspends execution until one of the following occurs: ! 50: ! 51: 11. A message of the desired type is placed on the queue. ! 52: ! 53: 22. msqid is removed from the system. When this occurs, msgrcv ! 54: sets errno to EDOM ! 55: ! 56: 33. The calling process receives a signal that is to be caught. ! 57: In this case, a message is not received and the calling ! 58: process resumes execution in the manner prescribed in signal. ! 59: ! 60: msgrcv fails and no message is received if any of the following ! 61: is true: ! 62: ! 63: ! 64: COHERENT Lexicon Page 1 ! 65: ! 66: ! 67: ! 68: ! 69: msgrcv() COHERENT System Call msgrcv() ! 70: ! 71: ! 72: ! 73: ! 74: * msqid is not a valid message queue identifier. msgrcv errno ! 75: to EINVAL. ! 76: ! 77: * Operation permission is denied to the calling process ! 78: (EEAACCCCEESS). ! 79: ! 80: * msgsz is less than zero (EEIINNVVAALL). ! 81: ! 82: * mtext is greater than msgsz and (_m_s_g_f_l_g & MMSSGG_NNOOEERRRROORR) is ! 83: false (EE22BBIIGG). ! 84: ! 85: * The queue does not contain a message of the desired type and ! 86: (_m_s_g_t_y_p & IIPPCC_NNOOWWAAIITT) is true (EENNOOMMSSGG). ! 87: ! 88: * msgp points to an illegal address (EEFFAAUULLTT). ! 89: ! 90: Upon successful completion, the following actions are taken with ! 91: respect to the data structure associated with msqid: ! 92: ! 93: * msg_qnum is decremented by one. ! 94: ! 95: * msg_lrpid is set equal to the process identifier of the ! 96: calling process. ! 97: ! 98: * msg_rtime is set equal to the current time. ! 99: ! 100: ***** Return Values ***** ! 101: ! 102: If msgrcv returns due to the receipt of a signal, it returns -1 ! 103: and sets errno to EINTR. If it returns due to the removal of ! 104: msqid from the system, it returns -1 and sets errno to EDOM. ! 105: Upon successful completion, msgrcv returns a value equal to the ! 106: number of bytes written into mtext. Otherwise, it returns -1 and ! 107: sets errno to an appropriate value. ! 108: ! 109: ***** Files ***** ! 110: ! 111: /usr/include/sys/ipc.h ! 112: /usr/include/sys/msg.h ! 113: /dev/msg ! 114: ! 115: ***** See Also ***** ! 116: ! 117: COHERENT system calls, msg, msgctl(), msgget(), msgsnd() ! 118: ! 119: ***** Notes ***** ! 120: ! 121: To improve portability, the COHERENT system implements the mmssgg as ! 122: a device driver rather than as an actual system call. ! 123: ! 124: ! 125: ! 126: ! 127: ! 128: ! 129: ! 130: COHERENT Lexicon Page 2 ! 131: ! 132:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.