00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "defs.h"
00022 #include <sys/msg.h>
00023 #include <sys/sem.h>
00024
00025 #define MQNAME "tempqnamea"
00026 #define MQNAME2 "tempqname2a"
00027
00028 int main(void)
00029 {
00030 int mqid, semid;
00031 key_t key;
00032 int i;
00033 struct msg {
00034 long mtype;
00035 char mtext[100000];
00036 } msg;
00037 struct msqid_ds msginfo;
00038
00039 (void)close(open(MQNAME, O_WRONLY | O_CREAT, 0));
00040 ec_neg1( key = ftok(MQNAME, 1) )
00041 if ((mqid = msgget(key, 0666)) != -1)
00042 ec_neg1( msgctl(mqid, IPC_RMID, &msginfo) )
00043 ec_neg1( mqid = msgget(key, 0666 | IPC_CREAT | IPC_EXCL) )
00044 ec_neg1( msgctl(mqid, IPC_STAT, &msginfo) )
00045 printf("bytes = %ld\n", (long)msginfo.msg_qbytes);
00046 msg.mtype = 1;
00047 for (i = msginfo.msg_qbytes; i > 0; i--) {
00048 if (msgsnd(mqid, &msg, i, IPC_NOWAIT) != -1) {
00049 printf("Size %d worked\n", i);
00050 exit(EXIT_SUCCESS);
00051 }
00052 if (errno != EINVAL) {
00053 printf("Failed on size %d\n", i);
00054 EC_FAIL
00055 }
00056 }
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 (void)close(open(MQNAME2, O_WRONLY | O_CREAT, 0));
00071 ec_neg1( key = ftok(MQNAME2, 1) )
00072 ec_neg1( semid = semget(key, 1, 0666 | IPC_CREAT) )
00073 ec_neg1( semid = semget(IPC_PRIVATE, 1, 0666 | IPC_CREAT) )
00074
00075 system("ipcs");
00076 exit(EXIT_SUCCESS);
00077
00078 EC_CLEANUP_BGN
00079 exit(EXIT_FAILURE);
00080 EC_CLEANUP_END
00081 }