| 发表于:2007-07-05 17:27:25 楼主 |
用的sunos5.0+gcc 两个程序互相通信 第一个 ipc_ex1.c : #define key_msg 0x101 #define msgsize 128 #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <string.h> main() { int msgid; struct msgbuf { long mtype; char mtext[128]; } buf1, buf2,bufsign; msgid = msgget( key_msg, 0666 ); while( 1 ) { // block if(gets( buf1.mtext )); { buf1.mtype = 2l; msgsnd( msgid, &buf1, msgsize, 0 ); if( buf1.mtext[0] == 'x ' ¦ ¦ buf1.mtext[0] == 'x ' ) break; msgrcv( msgid, &bufsign, msgsize, 1l, 0 ); printf( "receive message: %s\n ", bufsign.mtext ); } if(msgrcv( msgid, &buf2, msgsize, 2l, 0 )); { printf( "from2: %s\n ", buf2.mtext ); if( buf2.mtext[0] == 'x ' ¦ ¦ buf2.mtext[0] == 'x ' ) break; bufsign.mtype = 1l; strcpy( bufsign.mtext, "received ok " ); msgsnd( msgid, &bufsign, msgsize, 0 ); } } } 第二个 ipc_ex2.c : #define key_msg 0x101 #define msgsize 128 #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <string.h> main() { int msgid; struct msgbuf { long mtype; char mtext[128]; } buf1, buf2,bufsign; msgid = msgget( key_msg, 0666 ); while( 1 ) { // block if(gets( buf2.mtext )); { buf2.mtype = 2l; msgsnd( msgid, &buf2, msgsize, 0 ); if( buf2.mtext[0] == 'x ' ¦ ¦ buf2.mtext[0] == 'x ' ) break; msgrcv( msgid, &bufsign, msgsize, 1l, 0 ); printf( "receive message: %s\n ", bufsign.mtext ); } if(msgrcv( msgid, &buf1, msgsize, 2l, 0 )); { printf( "from1: %s\n ", buf1.mtext ); if( buf1.mtext[0] == 'x ' ¦ ¦ buf1.mtext[0] == 'x ' ) break; bufsign.mtype = 1l; strcpy( bufsign.mtext, "received ok " ); msgsnd( msgid, &bufsign, msgsize, 0 ); } } } |
|
|
|
|