#include #include #include #include #include #include void receiver(int fd); void sender(int fd); int main() { int fds[2]; pipe(fds); if (fork()) { receiver(fds[0]); } else if (fork()) { sender(fds[1]); } wait(NULL); } void sender(int fd) { char * str; int len; int q = 0; while (q != EOF) { q = scanf(" %ms", &str); len = strlen(str); printf("%d\n",len); if (len == 1) break; write(fd, &len, sizeof(int)); write(fd, str, len); free(str); } close(fd); } void receiver(int fd) { char * str; int len, q = 0; while (1) { q = read(fd, &len, sizeof(int)); if (q == EOF) break; str = malloc(len * sizeof(char)); q = read(fd, str, len); if (q == EOF) break; for (char * c = str; *c != '\0'; c++) *c = toupper(*c); puts(str); free(str); } }