welong_zuo 2014-07-24 06:11
浏览 830

linux c 关于vfork正确执行的问题

在编译下述代码的时候

如果已经宏定义了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;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
    • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
    • ¥16 mybatis的代理对象无法通过@Autowired装填
    • ¥15 可见光定位matlab仿真
    • ¥15 arduino 四自由度机械臂
    • ¥15 wordpress 产品图片 GIF 没法显示
    • ¥15 求三国群英传pl国战时间的修改方法
    • ¥15 matlab代码代写,需写出详细代码,代价私
    • ¥15 ROS系统搭建请教(跨境电商用途)
    • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。