我是fork()的新手,我正在试图弄清楚下面看到的程序如何不执行子进程的代码。你能帮我理解发生了什么吗?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int glob = 1;
int main(int argc, char *argv[])
{
int local = 1;
int *dyn, pid;
char *myName = "parent";
dyn = (int *) malloc (sizeof(int));
*dyn = 1;
printf("Here it is how fork() works\n");
if ((pid = fork()) < 0)
{
printf("Error.\n");
exit(1);
}
printf("pid: %d", pid);
if (pid)
{
sleep(1);
}
else
{
glob = 2;
local = 2;
*dyn = 2;
*myName = "child";
printf("I'm the child!");
}
printf("[[ %s ]]\n glob=%d\n local=%d\n *dyn=%d\n", myName, glob, local, *dyn);
exit(0);
}
答案 0 :(得分:3)
您的子进程很可能被分段错误杀死:
*myName = "child";
无效,因为您的编译器应该告诉您(如果它没有警告,请打开警告/诊断级别。)
如果您想更改myName
,则需要使用strcpy
之类的内容。但你不能在myName
上这样做,因为它可能指向只读内存。您应该使用动态内存对其进行初始化,就像使用dyn
指针一样。
如果你需要的只是myName
指向不同的字符串,你可以使用:
myName = "child";
答案 1 :(得分:1)
删除&#39; *&#39;在myName之前。
myName = "child";