online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
/* * Il programma ottiene un numero intero N dai parametri della linea di comando, * e crea un processo figlio che, utilizzando la funzione fornita 'genera_risultato', * calcola i due più piccoli numeri primi maggiori di N. I valori calcolati devono * essere inviati al processo padre tramite l'uso di una pipe. Il processo padre * attende il risultato dal processo figlio, e stampa a video il valore ricevuto. * Gestire in maniera appropriata (segnalando un messaggio di errore) i casi in * cui il processo padre ha un errore di ricezione oppure riceve un messaggio incompleto. */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <unistd.h> #include <sys/wait.h> /* Verificare se n e' primo */ bool primo(int n) { if(n % 2 == 0) return n == 2; for( int i = 3; i*i <= n; i+= 2) if(n%i == 0) return false; return true; } /* Calcola il più piccolo numero primo maggiore di K. * Parametri di ingresso: * k il valore k rispetto al quale calcolare i due numeri * Parametri di uscita: * n1 il più piccolo numero primo maggiore di k * n2 il secondo più piccolo numero primo maggiore di k */ void genera_risultato(int k, int *n1, int *n2) { int i = k+1; while(!primo(1)) i++; *n1 = i; i++; while(!primo(i)) i++; *n2 = i; } int main(int argc, char *argv[]) { int fd[2]; int risultato[2]; if(argc != 2) { printf("Non hai inserito il giusto numero di parametri\n"); return -1; } int n = atoi(argv[1]); /* Creazione della pipe */ if(pipe(fd) < 0){ printf("Errore nella creazione pipe\n"); return -1; } pid_t pid = fork(); // la chiamata fork crea un processo figlio /* Il codice a seguire viene eseguito da entrambi i processi: padre e figlio */ if(pid < 0) { /* Errore verificato */ printf("Fork non riuscita\n"); return -1; } else if(pid == 0) { /* Processo Figlio */ close(fd[0]); // Non interessato a leggere /* Preparazione del messaggio */ genera_risultato(n, &risultato[0], &risultato[1]); /* Inviare il messaggio */ int inviati = write(fd[1], genera_risultato, sizeof(int)); if(inviati != sizeof(genera_risultato)) { printf("Errore nell'invio\n"); return -1; } close(fd[1]); return 0; } else { /* Processo Padre */ close(fd[1]); // Non interessato a scrivere int numero[2]; int ricevuti = read(fd[0], &numero, sizeof(numero)); if(ricevuti < 0) { printf("Errore nella ricezione\n"); } else if(ricevuti < sizeof(numero)) { printf("Messaggio incompleto\n"); } else { printf("Risultati ricevuti: %d %d\n", risultato[0], risultato[1]); } close(fd[0]); return 0; } }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue