Skip to content

Commit

Permalink
Modifica stderr, fprintf()
Browse files Browse the repository at this point in the history
  • Loading branch information
b3h3moth committed Oct 8, 2013
1 parent 976c65f commit c76713f
Showing 1 changed file with 16 additions and 13 deletions.
29 changes: 16 additions & 13 deletions IPC_InterProcess_Communication/fifo/01_fifo.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,19 +44,21 @@ int main(int argc, char *argv[]) {

/* Creazione del file speciale FIFO o named pipe */
if (mkfifo(argv[1], PERMS) == -1) {
fprintf(stderr, "Err: %d mkfifo()\n", errno, strerror(errno));
fprintf(stderr, "[%ld]Err: mkfifo() %s: %s\n", (long)getpid(),
argv[1], strerror(errno));
exit(EXIT_FAILURE);
}

/* Creazione di un nuovo processo */
if ((pid = fork()) == -1) {
fprintf(stderr, "Err: %d fork()\n", errno, strerror(errno));
fprintf(stderr, "[%ld]Err: fork(): %s\n", (long)getpid(),
strerror(errno));
exit(EXIT_FAILURE);
}

if (pid == 0)
/* Processo figlio: si occupa di scrivere */
return fifo_child(argv[1], "Scrittura del processo figlio sulla FIFO");
return fifo_child(argv[1], "\"MESSAGGIO DAL PROCESSO FIGLIO\"\n");
else
/* Processo padre */
return fifo_parent(argv[1]);
Expand All @@ -72,11 +74,12 @@ int fifo_child(const char *fifo_name, const char *id_str)
int fd, rval;
ssize_t str_size;

fprintf(stderr, "[%ld]: (processo figlio) apertura FIFO %s...",
fprintf(stderr, "[%ld]: (processo figlio) apertura FIFO %s...\n",
(long)getpid(), fifo_name);

while ((fd = open(fifo_name, O_WRONLY)) == -1) {
fprintf(stderr, "[%ld]Err: %d open() FIFO scrittura\n", (long)getpid());
fprintf(stderr, "[%ld]Err: open() FIFO scrittura %s: %s\n",
(long)getpid(), fifo_name, strerror(errno));
exit(EXIT_FAILURE);
}

Expand All @@ -91,44 +94,44 @@ int fifo_child(const char *fifo_name, const char *id_str)
/* Calcolo della lunghezza del messaggio */
str_size = strlen(buf) + 1;

fprintf(stderr, "[%ld]: scrittura...", (long)getpid());
fprintf(stderr, "[%ld]: scrittura...\n", (long)getpid());

/* Si scrive 'buf' sulla FIFO */
if ((rval = write(fd, buf, str_size)) != str_size) {
fprintf(stderr, "[%ld]Err: scrittura pipe\n", (long)getpid());
exit(EXIT_FAILURE);
}

fprintf(stderr, "[%ld]: conclusione...", (long)getpid());
fprintf(stderr, "[%ld]: conclusione...\n", (long)getpid());

return(EXIT_SUCCESS);
}

/* Lo scopo della funzione fifo_parent() e' di consentire al processo padre di
leggere da una named pipe. */
fifo_parent(const char *fifo_name)
int fifo_parent(const char *fifo_name)
{
char buf[BUF_SIZE];
int fd, rval;
ssize_t str_size;

fprintf(stderr, "[%ld]: (processo padre) apertura FIFO %s...",
fprintf(stderr, "[%ld]: (processo padre) apertura FIFO %s...\n",
(long)getpid(), fifo_name);

while ((fd = open(fifo_name, O_RDONLY)) == -1) {
fprintf(stderr, "[%ld]Err: %d open() FIFO lettura\n", (long)getpid());
fprintf(stderr, "[%ld]Err: open() FIFO lettura %s: %s\n",
(long)getpid(), fifo_name, strerror(errno));
exit(EXIT_FAILURE);
}

fprintf(stderr, "[%ld]: lettura...", (long)getpid());
fprintf(stderr, "[%ld]: lettura...\n", (long)getpid());

/* Lettura */
if ((rval = read(fd, buf, BUF_SIZE)) == -1) {
fprintf(stderr, "[%ld ]Err: lettura dalla pipe\n", (long)getpid());
exit(EXIT_FAILURE);
}

fprintf(stderr, "[%ld] lettura %.*s\n", (long)getpid(), rval, buf);
fprintf(stderr, "[%ld]: lettura %.*s\n", (long)getpid(), rval, buf);

return(EXIT_SUCCESS);
}

0 comments on commit c76713f

Please sign in to comment.