#include <unistd.h>
#include <fcntl.h>
int main(int argc, char* argv[]) {
/**
* pipefd[0]: read end
* pipefd[1]: write end
*/
int pipefd[2];
pid_t cat_pid;
pid_t echo_pid;
if (pipe(pipefd) < 0) {
}
cat_pid = fork();
if (cat_pid == 0) {
close(pipefd[1]); /* close unused end */
dup2(pipefd[0], 0);
execl("/bin/cat", "/bin/cat", NULL);
return -1;
}
echo_pid = fork();
if (echo_pid == 0) {
close(pipefd[0]); /* close unused end */
dup2(pipefd[1], 1);
execl("/bin/echo", "/bin/echo", argv[0], NULL);
return -1;
}
close(pipefd[0]);
close(pipefd[1]);
waitpid(cat_pid, NULL, 0);
waitpid(echo_pid, NULL, 0);
return 0;
}
I2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8ZmNudGwuaD4KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKCS8qKgoJICogcGlwZWZkWzBdOiByZWFkIGVuZAoJICogcGlwZWZkWzFdOiB3cml0ZSBlbmQKCSAqLwoJaW50IHBpcGVmZFsyXTsKCXBpZF90IGNhdF9waWQ7CglwaWRfdCBlY2hvX3BpZDsKCQoJaWYgKHBpcGUocGlwZWZkKSA8IDApIHsKCQlwZXJyb3IoInBpcGUiKTsKCQlleGl0KC0xKTsKCX0KCQoJY2F0X3BpZCA9IGZvcmsoKTsKCWlmIChjYXRfcGlkID09IDApIHsKCQljbG9zZShwaXBlZmRbMV0pOyAvKiBjbG9zZSB1bnVzZWQgZW5kICovCgkJZHVwMihwaXBlZmRbMF0sIDApOwoJCWV4ZWNsKCIvYmluL2NhdCIsICIvYmluL2NhdCIsIE5VTEwpOwoJCXBlcnJvcigiZXhlY2wgL2Jpbi9lY2hvIik7CgkJcmV0dXJuIC0xOwoJfQoJCgllY2hvX3BpZCA9IGZvcmsoKTsKCWlmIChlY2hvX3BpZCA9PSAwKSB7CgkJY2xvc2UocGlwZWZkWzBdKTsgLyogY2xvc2UgdW51c2VkIGVuZCAqLwoJCWR1cDIocGlwZWZkWzFdLCAxKTsKCQlleGVjbCgiL2Jpbi9lY2hvIiwgIi9iaW4vZWNobyIsIGFyZ3ZbMF0sIE5VTEwpOwoJCXBlcnJvcigiZXhlY2wgL2Jpbi9lY2hvIik7CgkJcmV0dXJuIC0xOwoJfQoJCgljbG9zZShwaXBlZmRbMF0pOwoJY2xvc2UocGlwZWZkWzFdKTsKCXdhaXRwaWQoY2F0X3BpZCwgTlVMTCwgMCk7Cgl3YWl0cGlkKGVjaG9fcGlkLCBOVUxMLCAwKTsKCXJldHVybiAwOwp9Cg==