#include
#include
#include
#include
#include
#include
#include
#define KEY 25
void h_exit(int status);
int main()
{
int shmid;
char *shmptr;
int *status;
pid_t pid;
if((shmid=shmget(KEY,1000,IPC_CREAT))<0)
{
printf("Here is the server:error,get share memeroy failed!\n");
exit(1);
}
if((shmptr=(char*)shmat(shmid,0,0))==(void*)-1)
{
printf("Here is the server:error,to make the shmat\n");
exit(1);
}
printf("Here is the server: shmid:%d shmptr:%d",shmid,shmptr);
fgets(shmptr,10,stdin);
if((pid=fork())<0)
{
printf("Here is the server:creat child process wrong");
exit(1);
}
if(pid==0)
{
if((execl("./receiver",NULL))<0)
{
printf("Here is the child:wrong change to receiver");
exit(0);
}
printf("I have got into the receiver\n");
}
else
{
if(wait(status)<0)
{
printf("Here is the parent:wrong in wait\n");
exit(0);
}
}
h_exit(*status);
return 0;
}
void h_exit(int status)
{
if(WIFEXITED(status))
printf("normal termination,exit status=%d.\n", WEXITSTATUS(status));
}
运行时显示:
Here is the parent:wrong in wait
可见是wait出了错,一般来说应该是没有子程序造成的,但是我明明生成了子函数。不知道是错在哪里了?
请大侠指点一二。。。。
wang7131984 于 2009-09-05 11:27:55发表:
找本正规一点的书看看吧,apue之类的,可以说unix编程必看吧。
printf是不能用来打印错误消息的,最少也要用fprintf(stderr,fmt,string),另外标准库函数已经提供了perror和strerror这两个函数来打印errno的消息,到底那出错一看就知道,为什么还要使用自己定义的无聊的打印函数,什么信息都没给,叫人来猜? 另外你的status没有初始化,这会造成指针乱指,能够打印你自己的出错消息,你已经很幸运了
释梵 于 2009-09-05 11:22:28发表:
哦,我有点懂了。是不是调用execl后,原来的子进程就被替换掉了,没有了?