I am new to fork() and I'm trying to figure out how is it possible that the program,开发者_Python百科 you see below, doesn't execute the code of the child process. Will you please help me understand what's going on?
#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);
}
You child process is most likely killed by a segmentation fault:
*myName = "child";
is invalid as your compiler should have told you (if it didn't warn on that, please turn up the warnings/diagnostics level).
If you wanted to change myName
, you'd need to use something like strcpy
. But you can't do that on myName
because it could point to read-only memory. You should initialize it with dynamic memory like you do for the dyn
pointer.
If all you need is that myName
points to a different string, you can use:
myName = "child";
remove the '*' before myName.
myName = "child";
精彩评论