请用文字画出下面程序的流程图#include <stdio.h> #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h> #define MSGKEY 75 struct msgform { long mtype; char mtext[1030]; }msg; int msgqid,i; void CLIENT() { int i; msgqid=msgget(MSGKEY,0777); for (i=10;i>=1;i--) { msg.mtype=i; printf("(client) sent \n"); msgsnd(msgqid,&msg,1024,0); } exit(0); } void SERVER() { msgqid=msgget(MSGKEY,0777|IPC_CREAT); do{ msgrcv(msgqid,&msg,1030,0,0); printf("(Server) recieved\n"); } while(msg.mtype!=1); msgctl(msgqid,IPC_RMID,0); exit(0); } void main() { while((i=fork())==-1); if(!i) SERVER(); while((i=fork())==-1); if(!i) CLIENT(); wait(0); wait(0); }
时间: 2023-12-03 12:03:22 浏览: 99
C标准库函数集
5星 · 资源好评率100%
由于无法插入图片,我将文字描述程序的流程图如下:
主函数main()中,先通过fork()创建两个子进程。第一个子进程通过调用SERVER()函数,进入服务端代码段。第二个子进程通过调用CLIENT()函数,进入客户端代码段。
在CLIENT()函数中,先调用msgget()函数获取消息队列的标识符msgqid,然后通过循环,将消息类型i从10到1依次发送出去。在发送消息之前,先将消息类型i赋值给msg.mtype,然后调用msgsnd()函数将msg发送到消息队列中。
在SERVER()函数中,同样先调用msgget()函数获取消息队列的标识符msgqid,然后通过do-while循环,调用msgrcv()函数从消息队列中接收消息,并进行处理。当接收到的消息类型为1时,调用msgctl()函数删除消息队列。
最后,主函数main()通过调用wait()等待两个子进程结束,程序运行结束。
阅读全文