online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
/***************************************************************** Il candidato completi il programma fornito, implementando il main. Il programma crea un processo figlio; il processo figlio legge da tastiera un numero intero N >= 0, e trasmette al processo padre mediante una pipe i valori N, N-1, N-2, N-3, ..., 0 (incluso). Il processo padre legge dalla pipe i valori trasmessi dal processo figlio e li stampa, finche' non riceve il valore 0; dopodiche' il processo padre attende la terminazione del processo figlio e termina. Esempio: Sono il processo figlio. Inserisci un numero >=0: 4 Sono il processo padre. Ho ricevuto: 4 Sono il processo padre. Ho ricevuto: 3 Sono il processo padre. Ho ricevuto: 2 Sono il processo padre. Ho ricevuto: 1 Sono il processo padre. Ho ricevuto: 0 Sono il processo padre. Il figlio ha terminato. ******************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <unistd.h> #include <sys/wait.h> int main(int argc, char *argv[]) { int fd[2]; int N; /* 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 */ printf("Sono il processo figlio. Inserisci un numero interno >= 0: "); scanf("%d", &N); if(N < 0){ return -1; } int array[N]; for(int i = 0; i <= N; i++){ array[i] = i; } /* Inviare il messaggio */ int inviati = write(fd[1], array, N*sizeof(int)); if(inviati != sizeof(array)) { printf("Errore nell'invio\n"); return -1; } close(fd[1]); return 0; } else { /* Processo Padre */ close(fd[1]); // Non interessato a scrivere int array[N]; int ricevuti = read(fd[0], &array, N*sizeof(int)); if(ricevuti < 0) { printf("Errore nella ricezione\n"); } else if(ricevuti < sizeof(array)) { printf("Messaggio incompleto\n"); } else { printf("Numeri ricevuti: "); int i; for(i=N; i>=0; i--) { printf("%d", array[i]); printf("\n"); } } 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