Si vuole realizzare una semplice chat tramite le FIFO UNIX. Il programma da realizzare deve gestire concorrentemente la ricezione e l'invio di nuovi messaggi . La comunicazione tra due programmi omologhi avviene su due fifo differenti:
Di seguito viene riportato lo scheletro del codice che realizza la chat descritta: scrivere il codice mancante.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#define COMMAND_LENGTH 1024
extern int errno;
void handler();
char* fifo_name;
int main(int argc, char *argv[]) {
int fd, i=1;
char line[COMMAND_LENGTH+1];
char buff[256];
int ret;
char* user;
signal(SIGPIPE, handler);
signal(SIGINT, handler);
signal(SIGHUP, handler);
if (argc==1) {
printf("Sintassi: %s username\n", argv[0]);
exit(0);
}
fifo_name = (char*)malloc(sizeof(argv[1]));
strcpy(fifo_name, argv[1]);
if (argc==1) {
printf("Sintassi: %s username\n", argv[0]);
exit(0);
}
// crea la fifo "server"
if ((mkfifo(fifo_name,O_CREAT|0666) < 0) && (errno != EEXIST)) {
perror("Can't create FIFO");
exit(1);
}
// stabilisce la comunicazione con il partner
printf("Inserire lo user name della persona con cui vuoi parlare: ");
fgets(buff, 256,stdin);
user = (char*)malloc(sizeof(char*)*(strlen(buff)-1));
for (i=0; i < (strlen(buff)-1); i++)
user[i] = buff[i];
user[i]='\0';
// completare il codice
}
void handler() {
printf("########### Error ###########\nPartner has been disconnected..... process exit.\n#############################\n\n");
unlink(fifo_name);
exit(1);
}