Home | History | Annotate | Download | only in jni
      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <fcntl.h>
      4 #include <linux/sched.h>
      5 #include <stdlib.h>
      6 
      7 int v, fd;
      8 
      9 int child_proc()
     10 {
     11     v = 42;
     12     close(fd);
     13     exit(0);
     14 }
     15 
     16 #define STACK_SIZE 1024
     17 
     18 int main(int argc, char *argv[])
     19 {
     20     void **child_stack;
     21     char ch;
     22 
     23     v = 9;
     24     fd = open(argv[0], O_RDONLY);
     25     if (read(fd, &ch, 1) < 1) {
     26         printf("Can't read file");
     27         exit(1);
     28     }
     29     child_stack = (void **) malloc(STACK_SIZE * sizeof(void *));
     30     printf("v = %d\n", v);
     31 
     32     clone(child_proc, child_stack + STACK_SIZE, CLONE_VM|CLONE_FILES, NULL);
     33     sleep(1);
     34 
     35     printf("v = %d\n", v);
     36     if (read(fd, &ch, 1) < 1) {
     37         printf("Can't read file because it's closed by child.\n");
     38         return 0;
     39     } else {
     40         printf("We shouldn't be able to read from file which is closed by child.\n");
     41         return 0;
     42     }
     43 }
     44 
     45