首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C编程vfork返回值

C编程vfork返回值
EN

Stack Overflow用户
提问于 2013-03-25 03:18:32
回答 3查看 806关注 0票数 0

我必须创建一个程序:

  • 要求一个号码
  • 创建子进程(使用v叉)
  • 计算平方根(在子进程中)
  • 显示父进程的平方根。

这是我的密码

代码语言:javascript
复制
#include <stdio.h>
#include <sys/types.h>
#include <math.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    double n=0;
    printf("Number: "); //ask number
    scanf("%d", &n);

    pid_t pid = vfork(); //create child process

    if (pid==0)//if child process
    {
        printf("Child process started\n");
        n = sqrt(n);//calculate square root
    }
    else//parent process
    {
        printf("Returnning to parent process\n");
    printf("Square Root: %d",n);
    }       

    return 0;
}

但是我的代码不起作用,有人能帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-25 03:23:39

你为什么指望它能起作用?除了exec_exit之外,在vfork之后执行任何操作都会导致显式的未定义行为。请参见:

vfork() system call

关于vfork恐怖的进一步讨论

http://ewontfix.com/7/

http://www.openwall.com/lists/musl/2012/12/31/16

如果有趣的话,下面列出了您的程序可能出现的问题(UB的表现形式):

  • 孩子身上的printf会严重破坏父母的状态。
  • n可以永久存储在寄存器中,在这种情况下,父程序无法看到子程序所做的更改
  • 编译器可以看到nelse分支中未初始化,因此它根本不需要生成任何代码来读取它(这个分支通过访问值不确定的对象无条件地调用UB )。
票数 2
EN

Stack Overflow用户

发布于 2013-03-25 03:38:45

您正在计算子元素中的平方根,但试图在父文件中打印它。父方不知道平方根是什么。如果希望父进程打印平方根,则需要以某种方式将该值从子进程传递回父进程。更有可能的是,您应该在子进程中打印平方根。

票数 0
EN

Stack Overflow用户

发布于 2014-02-03 13:44:52

代码语言:javascript
复制
   int main(int argc, char **argv) {    int  n=0;


    pid_t pid = vfork(); //create child process

    if (pid==0)//if child process
    {
        printf("Child process started\n");
       scanf("%d",&n);

        n = sqrt(n);//calculate square root

       _exit(23);
    }
    else//parent process
    {
     printf("Returnning to parent process\n");
    printf("Square Root: %ld",n);
    }

    return 0; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15607061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档