diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/msgqrecv_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/msgqrecv_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,67 @@ + + +
+ +00001 +00010 #include <errno.h> +00011 #include <sys/msg.h> +00012 #include <sys/sem.h> +00013 #include <unistd.h> +00014 #include <string.h> +00015 #include "MsgQInternal.h" +00016 +00017 +00018 +00019 /******************************************************************************* +00020 * MsgQReceive (qName, msg, maxNBytes, timeout, err) +00021 * Description: Function for receiving a message with internal copy +00022 ********************************************************************************/ +00023 +00024 EXPORT_C int MsgQReceive(ULONG qName, char* msg, ULONG maxNBytes, int timeout, int* err) { +00025 MSGQ_INFO* pMsgQInfo = NULL; +00026 ssize_t rxBytes; +00027 int toTicks; +00028 +00029 struct { +00030 long mtype; +00031 char mtext[MAX_MSG_LEN]; +00032 } message; +00033 +00034 /* check parameters */ +00035 if ((pMsgQInfo = MsgQTableLookup(qName)) != NULL) { +00036 if(timeout != NO_WAIT && timeout != WAIT_FOREVER) +00037 toTicks = timeout < 10 ? 1: (ULONG)((timeout * sysconf(_SC_CLK_TCK)) / 1000); +00038 else +00039 toTicks = timeout; +00040 +00041 message.mtype = 1; +00042 /* receive message */ +00043 if((rxBytes = msgrcv(pMsgQInfo->qId, &message, (size_t)maxNBytes, 1, toTicks)) != -1) { +00044 message.mtext[rxBytes-4] = '\0'; +00045 bcopy(message.mtext, msg, rxBytes); +00046 pMsgQInfo->numMsgs--; +00047 *err = OK; +00048 return ((ULONG)rxBytes); +00049 } +00050 else +00051 *err = errno; +00052 } +00053 else +00054 *err = KMsgQLibQIdErr; +00055 +00056 return(ERROR); +00057 } +00058 +00059 +