当前位置: 技术问答>linux和unix
求高手改错 关于进程通信的
来源: 互联网 发布时间:2016-10-30
本文导语: 求高手改错;为什么结果不能输出预想的 get I love you forever #include #include #include #include #include #define SHMKEY 75 int shmid ,i; char *addr; char *argv[]={"I LOVE YOU FOREVER"}; void B() { shmid=shmget(SHMKEY,5112,0777); ...
求高手改错;为什么结果不能输出预想的 get I love you forever
#include
#include
#include
#include
#include
#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,'',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 %sn",addr);
exit(0);
}
main()
{
while((i=fork())==-1);
if(!i)A();
while((i=fork())==-1);
if(!i)B();
wait(0);
wait(0);
}
#include
#include
#include
#include
#include
#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,'',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 %sn",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()的两个进程直接用这个地址就行了
如果在B放入数据之前,A就执行完了,当然没有显示了
建议在fork()之前,由主进程创建共享内存段,并shmat()
然后fork()的两个进程直接用这个地址就行了
|
void B()
{
addr=shmat(shmid,0,0);
memset(addr,'',512);
//printf("1 %s",*argv);
strncpy(addr,argv[0],512);
exit(0);
}
这个函数改一下,shmid=shmget(SHMKEY,512,0777);把5112改成512
最好再各个函数里加点延时,
{
addr=shmat(shmid,0,0);
memset(addr,'',512);
//printf("1 %s",*argv);
strncpy(addr,argv[0],512);
exit(0);
}
这个函数改一下,shmid=shmget(SHMKEY,512,0777);把5112改成512
最好再各个函数里加点延时,
|
#include
#include
#include
#include
#include
#include
#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,'',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 %sn",addr);
exit(0);
}
main()
{
while((i=fork())==-1);
if(!i)A();
wait(0);
while((i=fork())==-1);
if(!i)B();
wait(0);
}
#include
#include
#include
#include
#include
#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,'',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 %sn",addr);
exit(0);
}
main()
{
while((i=fork())==-1);
if(!i)A();
wait(0);
while((i=fork())==-1);
if(!i)B();
wait(0);
}