#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
int getcmd(char *buf, int nbuf, pid_t pid)
{
if (fgets(buf
, nbuf
, stdin
) == NULL
) { return -1;
}
fprintf(stderr
, "pid: %d -- getcmd buf ======= --> %s\n", getpid
(), buf
); return 0;
}
int main() {
char buf[200];
int r;
pid_t pid = 0;
while(getcmd(buf, 200, pid) >= 0) {
fprintf(stderr
, "current pid: %d\n", getpid
()); pid = fork();
// Without forking the fgets() reads all lines normally
if(pid == 0)
wait(&r);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgoKaW50IGdldGNtZChjaGFyICpidWYsIGludCBuYnVmLCBwaWRfdCBwaWQpCnsKICBtZW1zZXQoYnVmLCAwLCBuYnVmKTsKICBpZiAoZmdldHMoYnVmLCBuYnVmLCBzdGRpbikgPT0gTlVMTCkgewogICAgZnByaW50ZihzdGRlcnIsICJFT0YgISEhXG4iKTsKICAgIHJldHVybiAtMTsKICB9CiAgZnByaW50ZihzdGRlcnIsICJwaWQ6ICVkIC0tIGdldGNtZCBidWYgPT09PT09PSAtLT4gJXNcbiIsIGdldHBpZCgpLCBidWYpOwogIHJldHVybiAwOwp9CgoKaW50IG1haW4oKSB7CgogIGNoYXIgYnVmWzIwMF07CiAgaW50IHI7CiAgcGlkX3QgcGlkID0gMDsKCiAgd2hpbGUoZ2V0Y21kKGJ1ZiwgMjAwLCBwaWQpID49IDApIHsKICAgIGZwcmludGYoc3RkZXJyLCAiY3VycmVudCBwaWQ6ICVkXG4iLCBnZXRwaWQoKSk7CiAgICBwaWQgPSBmb3JrKCk7CiAgICAvLyBXaXRob3V0IGZvcmtpbmcgdGhlIGZnZXRzKCkgcmVhZHMgYWxsIGxpbmVzIG5vcm1hbGx5CiAgICBpZihwaWQgPT0gMCkKICAgICAgZXhpdCgwKTsKCiAgICB3YWl0KCZyKTsKICB9CgogIHJldHVybiAwOwp9CgoK