#include<stdio.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#define MSGKEY 75
struct msgform
{ long mytype;
char mtext[1030]; }msg;
int msgqid,i;
void CLIENT()
{ int i;
msgqid=msgget(MSGKEY,0777);
for(i=10;i>=1;i--)
{ msg.mytype=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)received\n"); }
while(msg.mytype!=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); }
這是一個實作行程間通信的代碼,但是并不能運行出正確的結果(交替顯示十次)請問是哪里出現了問題?謝謝大佬們!
uj5u.com熱心網友回復:
void main()
{
while((i=fork())==-1);
if(!i) SERVER();
usleep (1000);
while((i=fork())==-1);
if(!i) CLIENT();
wait(0);
wait(0);
}
注意編碼規范
uj5u.com熱心網友回復:
@mouse_zhu 大佬我按你的方法做了,雖然出現了交替,但是結果還是SERVER函式無限跳出來uj5u.com熱心網友回復:
什么意思
uj5u.com熱心網友回復:
按你的方法在我的電腦上運行,交替顯示后無限跳出(server)received字樣,但是在我同學的電腦上運行無問題。雖然不知道為什么,但是謝謝啦。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/63249.html
標籤:非技術區
上一篇:lightdm啟動失敗
下一篇:檔案系統格式化和掛載
