vfork implementation...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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?

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/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux