问题描述
- linux c 关于vfork正确执行的问题
-
在编译下述代码的时候如果已经宏定义了DEBUG
产生如下结果:child : process id is 4287
child : parent process id is 4286havent 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 4222havent run strcpy -> buf:child : process write
have run strcpy -> buf:parent : process line
parent : process id is 4222point 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 linen"); #ifdef DEBUG if(pid == 0) #else if( (pid = vfork()) == 0) #endif { strcpy(buf, "child : process writen"); printf("n"); printf("child : process id is %dn", getpid()); printf("child : parent process id is %dnn", 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 linen"); printf("have run strcpy -> buf:%s", buf); printf("parent : process id is %dn", getpid()); write(fd, buf, strlen(buf)); printf("n"); close(fd); } return 0; }
时间: 2024-10-29 13:51:33