int todc[2], fromdc[2]; pipe(todc); pipe(fromdc); fork(); if ({parent}) { close(todc[0]); close(fromdc[1]); repeat readline from user convert write(todc[1], cmd, length) read(fromdc[0], reply) printf to userClient would similarly exec dc.
FILE *fp = fopen("stuff", "r"); c = getc(fp); fgets(buf, len, fp); fscanf(fp, ...) fclose(fp);
FILE *fp = popen("ls", "r"); fgets(buf, len, fp); pclose(fp);
fp = popen("mail admin", "w"); fprintf(fp, "Major error!\n"); pclose(fp);
pipe(p); rv = fork(); if (!rv) { // child close(p[0]); dup2(p[1],1); close(p[1]); execl("/bin/sh", "sh", "-c", cmd, NULL); } else { // parent close(p[1]); fp = fdopen(p[0], "r"); return fp; }