title: is data shared between processes when we use fork in c?
body: <p>In this C program, data is not being shared between process i.e. parent and child process. child has it's own data and parent has it's own data but pointer is showing the same address for both processes. How it is being done on background? Does fork generates copies of same data? if so then we have the same  pointer's address for both processes. Or is it due to the statically allocated data that is being copied for each process and the data is independent for each process? I want to know how it is being done?</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;sys/types.h&gt;
  #include&lt;unistd.h&gt;
  
  int main()
  {
      //Static Array
      int X[] = {1,2,3,4,5};
      int i, status;
  
      //The fork call
      int pid = fork();
  
      if(pid == 0) //Child process
      {
          //Child process modifies Array
          for(i=0; i&lt;5; i++)
              X[i] = 5-i;
          //Child prints Array
          printf("Child Array:\t");
          for(i=0; i&lt;5; i++)
              printf("%d\t", X[i]);
          printf("\nArray ptr = %p\n", X);
       }
       else //Parent process
       {
          // Wait for the child to terminate and let 
          // it modify and print the array
          waitpid(-1, &amp;status, 0);
  
          //Parent prints Array
          printf("Parent Array:\t");
          for(i=0; i&lt;5; i++)
             printf("%d\t", X[i]);
          printf("\nArray ptr = %p\n", X);
          }
      return 0;
  }
  </code></pre>
  
  <p>Here is the output of the program.</p>
  
  <pre><code> 1  Child Array:    5   4   3   2   1   
   2  Array ptr = 0x7fff06c9f670
   3  Parent Array:   1   2   3   4   5   
   4  Array ptr = 0x7fff06c9f670
  </code></pre>
  
  <p>When child process modifies array it should have also modified the data of parent process. What is going on in background? </p>