#include #include #include #include #include "fila_char.c" #define N_CIFRA 3 void cifra_cesar(char *c) { int tmp = *c + N_CIFRA; if( (tmp >= 'a' && tmp <= 'z') || (tmp >= 'A' && tmp <= 'Z') ) *c = tmp; //caso esteja dentro das maiusculas e minusculas else if(tmp > 'Z' && tmp < 'a') *c = tmp - 'Z' - 1 + 'A'; //caso exceda o Z maiusculo else if(tmp > 'z' && *c <= 'z') *c = tmp - 'z' - 1 + 'a'; // caso exceda o z minusculo } void p1(struct fila *qwrite) { char c; c = fgetc(stdin); while(c != '$') { por_fila(qwrite, c); //printf("%c", tirar_fila(qwrite)); c = fgetc(stdin); } /* se for para terminar enviar a mensagem aos outros processos */ por_fila(qwrite, c); } void p2(struct fila *qread, struct fila *qwrite) { char c; c = tirar_fila(qread); while(c != '$') { cifra_cesar(&c); por_fila(qwrite, c); c = tirar_fila(qread); } /* se for para terminar enviar a mensagem aos outros processos */ por_fila(qwrite, c); } void p3(struct fila *qread) { char c; int fd = open("t3-1.txt", O_WRONLY|O_CREAT|O_TRUNC, 0600); c = tirar_fila(qread); while(c != '$') { write(fd, &c, 1); c = tirar_fila(qread); } close(fd); } int main(int argc, char *argv[]) { struct fila *queue1 = criar_fila(); struct fila *queue2 = criar_fila(); if(fork() == 0) { //processo que lĂȘ do teclado p1(queue1); exit(0); } if(fork() == 0) { //processo que aplica a cifra p2(queue1, queue2); exit(0); } if(fork() == 0) { //processo que escreve no ficheiro p3(queue2); exit(0); } wait(NULL); wait(NULL); wait(NULL); return 0; }