在编译下述代码的时候
如果已经宏定义了DEBUG
产生如下结果:
child : process id is 4287
child : parent process id is 4286
havent run strcpy -> buf:THIS IS parent process line
have run strcpy -> buf:parent : process line
parent : process id is 4286
如果没有宏定义DEBUG
产生如下结果:
child : process id is 4223
child : parent process id is 4222
havent run strcpy -> buf:child : process write
have run strcpy -> buf:parent : process line
parent : process id is 4222
point is : 为什么 “havent run strcpy ->” 所在行的显示会有不同 ?
编译环境:ubuntu 10.04.3, gcc
代码如下
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEBUG
char buf[100];
int main(int argc, char **argv)
{
int fd;
#ifdef DEBUG
pid_t pid = vfork();
#else
pid_t pid = -1;
#endif
if((fd = open("temp", O_CREAT | O_TRUNC | O_RDWR, S_IRWXU)) == -1)
{
perror("open file error !\n");
return 0;
}
strcpy(buf, "THIS IS parent process line\n");
#ifdef DEBUG
if(pid == 0)
#else
if( (pid = vfork()) == 0)
#endif
{
strcpy(buf, "child : process write\n");
printf("\n");
printf("child : process id is %d\n", getpid());
printf("child : parent process id is %d\n\n", getppid());
write(fd, buf, strlen(buf));
close(fd);
exit(0); //child process must exit while work done
}
else
{
printf("havent run strcpy -> buf:%s", buf);
strcpy(buf, "parent : process line\n");
printf("have run strcpy -> buf:%s", buf);
printf("parent : process id is %d\n", getpid());
write(fd, buf, strlen(buf));
printf("\n");
close(fd);
}
return 0;
}