#include // fork, write, read, close, sleep #include // open #include // perror #include // waitpid, WNOHANG int main(int argc, char* argv[]) { int f1 = open(argv[1], O_RDONLY); if (f1 < 0) { perror("open"); return 1; } int f2 = open(argv[2], O_WRONLY | O_CREAT | O_APPEND); if (f2 < 0) { perror("open"); return 2; } pid_t fpid = fork(); if (fpid == 0) { // in child char buf; while (read(f1, &buf, 1)) { write(f2, &buf, 1); sleep(1); } } else { int status = -2; char buf = 'p'; while(status == -2) { sleep(2); write(f2, &buf, 1); waitpid(fpid, &status, WNOHANG); } } close(f1); close(f2); }