#include #include #include #include #include #include int vowel(char); int main(int argc, char *argv[]) { int pid_a, pid_b, status; int fd1, fd2, n = 1, cont = 1; int pipe1[2], pipe2[2]; char buf, c='1'; fd1 = open(argv[1], O_RDONLY); fd2 = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, 0644); pipe(pipe1); pipe(pipe2); pid_b =fork(); if(pid_b == 0) { while(cont == 1) if((n = read(fd1, &buf, 1)) !=0) { if(vowel(buf)) write(fd2, &buf, 1); else { lseek(fd1, -1, SEEK_CUR); c = '1'; write(pipe1[1], &c, 1); read(pipe2[0], &c, 1); } } else { cont = 0; write(pipe1[1], &c, 1); exit(0); } } if((pid_a = fork()) ==0) { read(pipe1[0], &c, 1); while(cont == 1) { if((n = read(fd1, &buf, 1)) !=0) { if(!vowel(buf)) write(fd2, &buf, 1); else { lseek(fd1, -1, SEEK_CUR); c = '1'; write(pipe2[1], &c, 1); read(pipe1[0], &c, 1); } } else { cont = 0; write(pipe2[1], &c, 1); exit(0); } } } wait(&status); wait(&status); exit(0); } int vowel(char buf) { if(buf == 'a' || buf == 'e' || buf == 'i' || buf == 'o' || buf == 'u') return(1); else return(0); }