while(msg.,mytype!=1);
msgctl(msgqid,IPC_RMID,0);
}
main()
{
if (fork())
{
SERVER();
wait(0);
}
else CLIENT();
}
实验结果
从理想实验结果来说,应当每一个Client发送一个消息后,Server接收该消息,Client 再发送下一条消息,也就是说“(Client)sent”和“(Serve)received”的字样应该在屏幕上交替出现。实际上结果是由Client先发送10条消息,然后erver接收10条消息,与预期的结果不同。
《实验分析》
Message的传送与控制并不保证完全同步,当一个程序不在激活的状态的时候,它完全可以继续睡眠,造成上面现象,在多次sendmessage后才receive message。这一点有助于理解消息转送的实现机理。
②调用msgctl ( )删除队列,并清除队列中的所有消息,归还资料。
二
《程序》
#include<sys/type.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#define MSGEKEY 75 /*定义共享区关键词MSGEKEY */
int shmid,i;
int *addr;
CLIENT()
{
int ;
shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);
addr=shmat(shmid,0,0);
for(i=9;i>=0;i--)
{
while(*addr!=-1);
Printf(“(client)sentin”);
*addr=i;
}
exit(0);
}