我必须创建一个程序:
这是我的密码
#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;
}但是我的代码不起作用,有人能帮我吗?
发布于 2013-03-25 03:23:39
你为什么指望它能起作用?除了exec或_exit之外,在vfork之后执行任何操作都会导致显式的未定义行为。请参见:
关于vfork恐怖的进一步讨论
http://ewontfix.com/7/
http://www.openwall.com/lists/musl/2012/12/31/16
如果有趣的话,下面列出了您的程序可能出现的问题(UB的表现形式):
printf会严重破坏父母的状态。n可以永久存储在寄存器中,在这种情况下,父程序无法看到子程序所做的更改n在else分支中未初始化,因此它根本不需要生成任何代码来读取它(这个分支通过访问值不确定的对象无条件地调用UB )。发布于 2013-03-25 03:38:45
您正在计算子元素中的平方根,但试图在父文件中打印它。父方不知道平方根是什么。如果希望父进程打印平方根,则需要以某种方式将该值从子进程传递回父进程。更有可能的是,您应该在子进程中打印平方根。
发布于 2014-02-03 13:44:52
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; }https://stackoverflow.com/questions/15607061
复制相似问题