#include main() { int tochild[2], fromchild[2]; double d; char buf[11]; if (pipe(tochild) < 0) { perror("pipe"); exit(1); } if (pipe(fromchild) < 0) { perror("pipe"); exit(1); } if (fork() == 0) { close(tochild[1]); close(fromchild[0]); if (dup2(tochild[0], 0) < 0) { perror("dup2"); exit(1); } if (dup2(fromchild[1], 1) < 0) { perror("dup2"); exit(1); } close(tochild[0]); close(fromchild[1]); execlp("ticker", "ticker", NULL); perror("execlp ticker"); exit(1); } else { close(tochild[0]); close(fromchild[1]); while(1) { sleep(1); if (write(tochild[1], "\n", 1) != 1) exit(1); if (read(fromchild[0], buf, 10) != 10) exit(1); buf[10] = '\0'; sscanf(buf, "%lf", &d); printf("%.5lf\n", d); } } }