Execv/fork su file aperto

From Sistemi Operativi
Jump to navigation Jump to search

Ho provato a far "girare" questo piccolo eseguibile, notato l'out ho provato a dare le mie conclusioni (non sono certo della correttezza)

int main (int argc, char *argv[])
{
/* nessun controllo */
	if ( fork() ){
		int t;
		wait (&t);
		printf ("sono il padre\n");
	}
	else{
		printf ("sono il figlio\n");
		execv ("/bin/echo", ++argv);
	}
	return 0;
}

cmd

$> ./es echo prova >> tmp

out

prova
sono il padre

conclusioni

  • fork => padre e figlio condividono lo stesso offset (il figlio stampa prova e il padre stampa "sotto")
  • exec => non condivide stesso offset (sono il figlio viene sovrascritto)