[初级问题]进程间通信

我初学,想写一个进程通信的演示代码:
1,server调用MsgReceive()挂起
2,client调用MsgSend()送出一条信息从激活server
另外,因为我不知道如何从client中得到server的进程id以及channel id,所以创建了一个共享内存区存放这两个个id
结果:
server运行并挂起,运行client导致系统重新启动,请问可以帮我看一下吗?
谢谢
/////////////////////////server///////////////////////////////////////
#include<stdio.h>
#include<sys/neutrino.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/mman.h>
int main()
{
int id;
int bufer[]={0,0,0,0,0,0,0,0}//用于接收消息
int fd;
unsigned* addr;
fd=shm_open(“wang”,O_RDWR|O_CREAT,0777);
addr=mmap(0, 100,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
*addr=getpid();
id=ChannelCreate(_NTO_CHF_COID_DISCONNECT);
(++addr)=id;
close(fd);
MsgReceive(id,buffer,sizeof(buffer)/siezeof(int),NULL);
}
////////////////////client//////////////////////////////
头文件同上
int main()
{
int id;
const int bufferSend[]={0,0,0,0,0,0,0,0};
int bufferReceive[]={0,0,0,0,0,0,0,0};
int fd;
unsigned
addr;
fd=shm_open(“wang”,O_RDWR|O_CREAT,0777);
addr=mmap(0, 100,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
id=ConnectAttach(0,addr,(++addr),0,0);
shm_unlink(“wang”);
MsgSend(id,bufferSend,sizeof(bufferSend)/sizeof(int),bufferReceive,
sizeof(bufferReceive)/sizeof(int));
}

你两边共享内存都用create建立呀!应该只用一端建立,另外一端不能再有create选项

谢谢

我改过来了,运行client还是会重启

另外,还有什么好的方法可以在client中得到server的PID和channel ID吗?

把shm_unlink(“wang”); 删掉试试