On 6/14/06, Abu M. Muttalib <abum@xxxxxxxxx> wrote:
Hi, This mail is intended for Robert Love, I hope I can find him on the list. Please refer to Pg 24 of chapter 2 of Linux Kernel Development. As mentioned in the description of vfork call, it is said that child is not allowed to write to the address space, but in the following example its not so. The child is able to write to the process address space. This program was tested with Linux Kernel 2.6.9. Why is it so?
i think you might probably have misread it. the child is not disallowed to write to the address space, but its just not healthy. since child is using the same address space as that of the parent, whatever global variables accessed by the child and parent will both be the same. u can refer to the arch/xxx/kernel/process.c and see the sys_vfork implementation. the child's virtual memory is a clone of that of the parent. also note that the parent is put on hold till the child exits or execvs, so that this technique cannot be used for truly parallel IPC between parent and child. its intention is clearly mentioned in the man page itself.
fork.c ---------------------------------------------------------------------------- --------------------------------------- #include <stdio.h> unsigned char *glob_var = NULL; void main() { int pid = -8,i; pid = vfork(); if(pid < 0) printf("\n FORK ERROR \n"); if(pid == 0) { unsigned char * local_var = NULL; local_var = (unsigned char *)malloc(5); strcpy(local_var,"ABCD"); glob_var = local_var; printf("\nCHILD :Value of glob_var is %X local_var is %X glob_var is %c \n",glob_var,local_var,*glob_var); for(i=0;i<4;i++) { printf("\n CHAR is %c \n",glob_var[i]); } printf("\nCHILD1 :Value of glob_var is %X %c\n",glob_var,*(glob_var)); } if(pid > 0) { printf("\nParent : Value of glob_var is %X %c\n",glob_var,*(glob_var)); free(glob_var); printf("\nParent : Value of glob_var is %X %c\n",glob_var,*(glob_var)); exit(0); } } ---------------------------------------------------------------------------- --------------------------------------- Regards, Abu. -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/