diff --git a/files/home/user/feedback.txt b/files/home/user/feedback.txt old mode 100755 new mode 100644 diff --git a/files/usr/share/man/start.man b/files/usr/share/man/start.man new file mode 100644 index 0000000..d9995ba --- /dev/null +++ b/files/usr/share/man/start.man @@ -0,0 +1,12 @@ +SYNOPSIS + start [OPTIONS] [FILE] + +DESCRIPTION + Start a recording session aimed at displaying an ordered list of 50 items + containing information about the processes that the CPU has just processed. + + +OPTIONS + -h: shows command help. //non funziona per ora lol + -p: start the session with generated children + -f [FILE]: start the session launching a specified program \ No newline at end of file diff --git a/mentos/src/process/scheduler_feedback.c b/mentos/src/process/scheduler_feedback.c index 2e1648f..d62798c 100644 --- a/mentos/src/process/scheduler_feedback.c +++ b/mentos/src/process/scheduler_feedback.c @@ -72,18 +72,7 @@ void writeFeedback(pid_t pid, char name[], pid_t padre, int mode, int prio) } - //Entra solo una volta, dopo aver finito la sessione (riempito il buffer) e richiesta una nuova - if (brake == 0 && count == MAX_STORAGE) { - - //RESET BUFFER - for (int i = 0; i < MAX_STORAGE; i++) { - PID_BUFFER[i] = 0; - PID_PRIO[i] = 0; - } - err = 1; - count = 0; - } - + //Se prima volta e' start bene, proseguiamo siccome brake e' zero, @@ -160,6 +149,7 @@ void writeFeedback(pid_t pid, char name[], pid_t padre, int mode, int prio) } vfs_close(file); count = 0; + err = 1; } if(!strcmp(name,"error") && err){ @@ -178,9 +168,12 @@ void wipe() const char *namef = "/home/user/feedback.txt"; vfs_file_t *file = vfs_open(namef, O_RDWR, flag); count = 0; + offset += sizeof(char)*100; //overkill for(int i = 34*sizeof(char); i < offset; i+=sizeof(char)){ + //NB: se riusciamo a creare un file nostro e scrivere non solo sugli spazi + //questo costrutto non funziona, del sovrascrivere finche count non e' zero vfs_write(file, " ", i, sizeof(char)); } vfs_close(file); diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt index a0e1504..2395326 100644 --- a/programs/CMakeLists.txt +++ b/programs/CMakeLists.txt @@ -69,7 +69,8 @@ set(PROGRAMS poweroff.c rm.c shell.c - start.c + start.c + startERR.c uname.c cat.c echo.c diff --git a/programs/start.c b/programs/start.c index 48b9302..e4244ec 100644 --- a/programs/start.c +++ b/programs/start.c @@ -9,6 +9,7 @@ #include #include #include +#include /* Start, funzionamento: L'utente scrivendo start da shell (interna a MentOS) avviera' la registrazione di un numero @@ -25,39 +26,86 @@ Tre tipologie di parametri/flag accettati dalla start: int main(int argc, char *argv[]) { - //N.B va implementato il reset della struttura che alloca i dati(PID) - - //aka utente ha inserito un comando start con flag errati - if(argc > 1 && (strcmp(argv[1],"-p") || strcmp(argv[1],"-f"))){ - printf("start has no command '%s'\n\n", argv[1]); - execl("../../bin/startERR","error", NULL, NULL); - return -1; + int flag = 0; + + if(argc == 1){ + printf("Start Recording\n"); + printf("End Recording\n"); + return 0; } + else if(argc == 2 && !(strcmp(argv[1],"-p"))){ - printf("Start Recording\n"); + printf("Start Recording\n"); - if(argc == 2){ + for(int i = 0; i < 5; i++){ - if(!(strcmp(argv[1],"-p"))){ - - for(int i = 0; i < 5; i++){ - - if(fork()==0){ - - //volendo no fork qua, ma solo chiamata a t_fork 5 con una exec - //execl("../../bin/start0", "figlio", NULL, NULL); - exit(1); - - } - - } - - for(int i = 0; i < 5; i++){ - wait(NULL); + if(fork()==0){ + exit(1); } } + + for(int i = 0; i < 5; i++){ + wait(NULL); + } + + printf("End Recording\n"); + return 0; + + } + else if( argc==3 && !strcmp(argv[1],"-f") ){ + + char destination[] = "../../bin/tests/"; + strcat(destination,argv[2]); + if(fork()==0){ + flag = execl(destination, "customProgram", NULL, NULL); + if(flag == -1){ + execl("../../bin/startERR","error", NULL, NULL); + } + } + wait(NULL); + + /* + if(flag != -1) + { + printf("Start Recording\n"); + printf("End Recording\n"); + }*/ + + int fd; + mode_t flag1 = 000111; + char destination1[] = "../../bin/tests/"; + strcat(destination1,argv[2]); + fd = open(destination1, S_IRUSR, flag1); + if( fd != -1 ){ + printf("Start Recording\n"); + printf("End Recording\n"); + close(fd); + } + else{ + printf("start: file '%s' not found!\n\n", destination1); + } + + + return 0; } - printf("End Recording\n"); - return 0; + + if(argc != 1){ + //se arriviamo qui, significa che sono stati passati parametri errati + if(strcmp(argv[1],"-f")){ + printf("start: start has no command '%s'\n\n", argv[1]); + execl("../../bin/startERR","error", NULL, NULL); + } + else{ + printf("start: missing FILE for OPTION '%s'\n\n", argv[1]); + execl("../../bin/startERR","error", NULL, NULL); + } + } + + + /* + if(argc > 1 && (strcmp(argv[1],"-p") && strcmp(argv[1],"-f"))){ //da rafforzare + + }*/ + } \ No newline at end of file diff --git a/programs/startERR.c b/programs/startERR.c new file mode 100644 index 0000000..ebe8be1 --- /dev/null +++ b/programs/startERR.c @@ -0,0 +1,5 @@ + +int main(void) +{ + return -1; +} \ No newline at end of file diff --git a/programs/tests/CMakeLists.txt b/programs/tests/CMakeLists.txt index 22d2855..e961136 100644 --- a/programs/tests/CMakeLists.txt +++ b/programs/tests/CMakeLists.txt @@ -85,6 +85,9 @@ set(TESTS t_kill.c t_itimer.c t_gid.c + + # Testing my program + myProg.c ) foreach(TEST ${TESTS}) diff --git a/programs/tests/myProg.c b/programs/tests/myProg.c new file mode 100644 index 0000000..598de09 --- /dev/null +++ b/programs/tests/myProg.c @@ -0,0 +1,7 @@ +#include + +int main(void) +{ + printf("File di test\n"); + return 0; +}