Sto cercando di fare qualche esercizio ma quando provo a compilare da terminale e poi eseguo il programma mi viene restituito l'errore "Errore di segmentazione (core dump creato)". Cosa sbaglio?
Codice: Seleziona tutto
/* Progettare un server che riceve come argomenti da linea di comando i nomi di due FIFO, *
* in e out, da cui il programma legge e su cui il programma scrive, rispettivamente. *
* Il server riceve sull'input stream due linee che rappresentano due interi 'n' e 'm' *
* e scrive sull'output stream una linea che rappresenta il prodotto 'n * m'. */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#define MAX_SIZE 50
char *readline(int fd, char *buffer) {
size_t res = 0;
char c = 0;
int i = 0;
while (1) {
res = read(fd, &c, 1);
if (res < 0)
return NULL;
else if (res == 0 || c == '\n')
break;
buffer[i++] = c;
}
buffer[i] = '\0';
return buffer;
}
int main(int argc, char** argv) {
mkfifo(argv[1], 0666);
mkfifo(argv[2], 0666);
int in = open(argv[1], O_RDONLY);
int out = open(argv[2] ,O_WRONLY);
char line[MAX_SIZE], text[MAX_SIZE];
memset(line, 0, MAX_SIZE);
int n, m;
while (1) {
if (readline(in, line) &&
sscanf(line, "%d", &n) == 1 &&
readline(in, line) &&
sscanf(line, "%d", &m) == 1) {
int result = n * m;
sprintf(text, "%d", result);
strcat(text, "\n");
write(out, text, strlen(text));
}
}
close(in);
close(out);
return 0;
}