#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> #include <sys/times.h> #include <time.h> #include <stdlib.h> void myexit(int ret); char **m_argv = 0; char umount_command[256]; int main(int argc,char *argv[]) { pid_t p,pr; int status,nprove; clock_t c2,c1; struct tms t2,t1; int i; if (argc < 3) { fprintf(stderr,"Uso: %s <numero di prove> <parametri della mount ...>\n",argv[0]); fprintf(stderr,"I <parametri della mount ...> devono cominciare con il filesystem da montare\n"); myexit(5); } if (sscanf(argv[1],"%d",&nprove) != 1 || (int)nprove <= 0) { fprintf(stderr,"%s non va bene come <numero di prove>\n",argv[1]); myexit(5); } /* argv e m_argv hanno (in questo caso) lo stesso numero di elementi */ m_argv = malloc( sizeof(char *) * argc ); m_argv[0] = "/bin/mount"; for(i = 1 ; i < (argc - 1) ; i++ ) m_argv[i] = argv[i+1]; m_argv[argc - 1] = NULL; for (i = 0; i < argc ; i++) printf("argv[%d] == %s\n", i , m_argv[i] ? m_argv[i] : "NULL" ); for (i=0; i<nprove ; i++) { c1 = times(&t1); if ( (p = fork()) == -1) { perror("Errore sulla fork"); myexit(5); } if ( !p ) { /* child */ execv("/bin/mount",m_argv); perror("Errore"); /* exec return just in case of error */ myexit(5); } /* parent */ pr = wait(&status); if (pr == -1 ) { perror("wait"); myexit(5); } c2 = times(&t2); if (WIFEXITED(status)) { printf("Codice di ritorno di child %d\n",WEXITSTATUS(status)); } if (WIFSIGNALED(status)) { printf("Segnale che ha terminato child %d\n",WTERMSIG(status)); } if (WIFSTOPPED(status)) { printf("Segnale che ha causato lo stop di child %d\n",WSTOPSIG(status)); } printf("Real time: %d clk == %f secs\n", (int)(c2-c1),((int)(c2-c1))/((double)CLK_TCK)); printf(" Parent User time: %d clk == %f secs\n", (int)(t2.tms_utime-t1.tms_utime), (t2.tms_utime-t1.tms_utime)/((double)CLK_TCK)); printf(" Parent Sys time: %d clk == %f secs\n", (int)(t2.tms_stime-t1.tms_stime), (t2.tms_stime-t1.tms_stime)/((double)CLK_TCK)); printf(" Child User time: %d clk == %f secs\n", (int)(t2.tms_cutime-t1.tms_cutime), (t2.tms_cutime-t1.tms_cutime)/((double)CLK_TCK)); printf(" Child Sys time: %d clk == %f secs\n", (int)(t2.tms_cstime-t1.tms_cstime), (t2.tms_cstime-t1.tms_cstime)/((double)CLK_TCK)); sprintf(umount_command,"/bin/umount %1.200s",argv[2]); if ( system(umount_command) == -1 ) { perror("system(umount)"); myexit(5); } } myexit(0); } void myexit(int ret) { /* free the (eventually) allocated resources */ if (m_argv != 0) free(m_argv); exit(ret); }-- AntonioValletta - 30 Nov 2001
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |