c语言进程通信的一点问题
#include<unistd.h>#include<sys/ipc.h>#include<sys/shm.h>#include<errno.h>#defineKEY12...
#include<unistd.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<errno.h>
#define KEY 1234/*键*/
#define SIZE 1024/*欲建立的共享内存的大小*/
int main()
{
int shmid;
char *shmaddr;
struct shmid_ds buf;
shmid=shmget(KEY,SIZE,IPC_CREAT|0600);/*建立共享内存*/
if(shmid==-1)
{
printf("create share memory failed:%s",strerror(errno));
return 0;
}
if(fork( )==0)/*子进程*/
{
printf("In son process");
shmaddr=(char*)shmat(shmid,NULL,0);
if(shmaddr==(void*)-1)/*系统自动选择一个地址连接*/
{
printf("connect to the share memory failed:%s",strerror(errno));
return 0;
}
/*向共享内存内写数据*/
printf("father is writing the membery\n");
strcpy(shmaddr,"this text is written by son.\n");
shmdt(shmaddr);/*断开共享内存*/
exit(0);/*断开共享内存*/
}
else/*父进程*/
{
printf("In father process\n");
wait(0);
shmctl(shmid,IPC_STAT,&buf);/*取得共享内存的相关信息*/
shmaddr=(char*)shmat(shmid,NULL,0);
/*系统自动选择一个地址连接*/
if(shmaddr==(void*)-1)
{
printf("connect the share memory failed:%s",strerror(errno));
return 0;
}
printf("father is reading the membery\n");
printf("%s\n",shmaddr);
printf("father is writing the membery\n");
strcpy(shmaddr,"this text is written by father.\n");
shmdt(shmaddr);
/*断开共享内存*/
/*当不再有任何其它进程使用该共享内存时系统将自动销毁它*/
shmctl(shmid,IPC_RMID,NULL);
}
}
我想达到的目的是:子进程先将子进程号写入共享内存,父进程将内容读出并显示。随后,父进程将父进程号写入同一块共享内存,要求子进程读出并显示。 想用信号量的方法写的 但是也不知道怎么写... 展开
#include<sys/ipc.h>
#include<sys/shm.h>
#include<errno.h>
#define KEY 1234/*键*/
#define SIZE 1024/*欲建立的共享内存的大小*/
int main()
{
int shmid;
char *shmaddr;
struct shmid_ds buf;
shmid=shmget(KEY,SIZE,IPC_CREAT|0600);/*建立共享内存*/
if(shmid==-1)
{
printf("create share memory failed:%s",strerror(errno));
return 0;
}
if(fork( )==0)/*子进程*/
{
printf("In son process");
shmaddr=(char*)shmat(shmid,NULL,0);
if(shmaddr==(void*)-1)/*系统自动选择一个地址连接*/
{
printf("connect to the share memory failed:%s",strerror(errno));
return 0;
}
/*向共享内存内写数据*/
printf("father is writing the membery\n");
strcpy(shmaddr,"this text is written by son.\n");
shmdt(shmaddr);/*断开共享内存*/
exit(0);/*断开共享内存*/
}
else/*父进程*/
{
printf("In father process\n");
wait(0);
shmctl(shmid,IPC_STAT,&buf);/*取得共享内存的相关信息*/
shmaddr=(char*)shmat(shmid,NULL,0);
/*系统自动选择一个地址连接*/
if(shmaddr==(void*)-1)
{
printf("connect the share memory failed:%s",strerror(errno));
return 0;
}
printf("father is reading the membery\n");
printf("%s\n",shmaddr);
printf("father is writing the membery\n");
strcpy(shmaddr,"this text is written by father.\n");
shmdt(shmaddr);
/*断开共享内存*/
/*当不再有任何其它进程使用该共享内存时系统将自动销毁它*/
shmctl(shmid,IPC_RMID,NULL);
}
}
我想达到的目的是:子进程先将子进程号写入共享内存,父进程将内容读出并显示。随后,父进程将父进程号写入同一块共享内存,要求子进程读出并显示。 想用信号量的方法写的 但是也不知道怎么写... 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询