求高手改错 关于进程通信的
求高手改错;为什么结果不能输出预想的 get I love you forever
#include<stdio.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<string.h>
#define SHMKEY 75
int shmid ,i;
char *addr;
char *argv[]={"I LOVE YOU FOREVER"};
void B()
{
shmid=shmget(SHMKEY,5112,0777);
addr=shmat(shmid,0,0);
memset(addr,'\0',512);
//printf("1 %s",*argv);
strncpy(addr,argv[0],512);
exit(0);
}
void A()
{
shmid=shmget(SHMKEY,512,0777|IPC_CREAT);
addr=shmat(shmid,0,0);
printf("get %s\n",addr);
exit(0);
}
main()
{
while((i=fork())==-1);
if(!i)A();
while((i=fork())==-1);
if(!i)B();
wait(0);
wait(0);
}
------解决方案--------------------你这个依赖于两个进程的执行顺序吧
如果在B放入数据之前,A就执行完了,当然没有显示了
建议在fork()之前,由主进程创建共享内存段,并shmat()
然后fork()的两个进程直接用这个地址就行了
------解决方案--------------------void B()
{
addr=shmat(shmid,0,0);
memset(addr,'\0',512);
//printf("1 %s",*argv);
strncpy(addr,argv[0],512);
exit(0);
}
这个函数改一下,shmid=shmget(SHMKEY,512,0777);把5112改成512
最好再各个函数里加点延时,
------解决方案--------------------#include<stdio.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<string.h>
#include <stdlib.h>
#define SHMKEY 75
int shmid ,i;
char *addr;
char *argv={"I LOVE YOU FOREVER"};
void B()
{
shmid=shmget(SHMKEY,512,0777);
addr=shmat(shmid,0,0);
memset(addr,'\0',512);
//printf("1 %s",argv);
strcpy(addr,argv);
//printf("%s",addr);
exit(0);
}
void A()
{
shmid=shmget(SHMKEY,512,0777|IPC_CREAT);
addr=shmat(shmid,0,0);
printf("get %s\n",addr);
exit(0);
}
main()
{
while((i=fork())==-1);
if(!i)A();
wait(0);
while((i=fork())==-1);
if(!i)B();
wait(0);
}