#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#define BUFFER_SIZE 256
int main() {
int pipefd[2];
pid_t pid;
char buffer[BUFFER_SIZE];
int nbytes;
// Create pipe
if (pipe(pipefd) == -1) {
}
// Fork a child process
pid = fork();
if (pid == -1) {
}
if (pid == 0) { // Child process
// Close the write end of the pipe
close(pipefd[1]);
// Read from the pipe
nbytes = read(pipefd[0], buffer, BUFFER_SIZE);
if (nbytes == -1) {
}
printf("Child received message: %s", buffer
);
// Close the read end of the pipe
close(pipefd[0]);
} else { // Parent process
// Close the read end of the pipe
close(pipefd[0]);
// Write to the pipe
printf("Enter message to send to child: "); fgets(buffer
, BUFFER_SIZE
, stdin
); write(pipefd[1], buffer, BUFFER_SIZE);
// Close the write end of the pipe
close(pipefd[1]);
// Wait for the child to finish
wait(NULL);
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHVuaXN0ZC5oPgojaW5jbHVkZTxzeXMvd2FpdC5oPgoKI2RlZmluZSBCVUZGRVJfU0laRSAyNTYKCmludCBtYWluKCkgewogICAgaW50IHBpcGVmZFsyXTsKICAgIHBpZF90IHBpZDsKICAgIGNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKICAgIGludCBuYnl0ZXM7CgogICAgLy8gQ3JlYXRlIHBpcGUKICAgIGlmIChwaXBlKHBpcGVmZCkgPT0gLTEpIHsKICAgICAgICBwZXJyb3IoInBpcGUiKTsKICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICB9CgogICAgLy8gRm9yayBhIGNoaWxkIHByb2Nlc3MKICAgIHBpZCA9IGZvcmsoKTsKCiAgICBpZiAocGlkID09IC0xKSB7CiAgICAgICAgcGVycm9yKCJmb3JrIik7CiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgfQoKICAgIGlmIChwaWQgPT0gMCkgeyAgLy8gQ2hpbGQgcHJvY2VzcwogICAgICAgIC8vIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUKICAgICAgICBjbG9zZShwaXBlZmRbMV0pOwoKICAgICAgICAvLyBSZWFkIGZyb20gdGhlIHBpcGUKICAgICAgICBuYnl0ZXMgPSByZWFkKHBpcGVmZFswXSwgYnVmZmVyLCBCVUZGRVJfU0laRSk7CiAgICAgICAgaWYgKG5ieXRlcyA9PSAtMSkgewogICAgICAgICAgICBwZXJyb3IoInJlYWQiKTsKICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAgIH0KCiAgICAgICAgcHJpbnRmKCJDaGlsZCByZWNlaXZlZCBtZXNzYWdlOiAlcyIsIGJ1ZmZlcik7CgogICAgICAgIC8vIENsb3NlIHRoZSByZWFkIGVuZCBvZiB0aGUgcGlwZQogICAgICAgIGNsb3NlKHBpcGVmZFswXSk7CiAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwogICAgfSBlbHNlIHsgIC8vIFBhcmVudCBwcm9jZXNzCiAgICAgICAgLy8gQ2xvc2UgdGhlIHJlYWQgZW5kIG9mIHRoZSBwaXBlCiAgICAgICAgY2xvc2UocGlwZWZkWzBdKTsKCiAgICAgICAgLy8gV3JpdGUgdG8gdGhlIHBpcGUKICAgICAgICBwcmludGYoIkVudGVyIG1lc3NhZ2UgdG8gc2VuZCB0byBjaGlsZDogIik7CiAgICAgICAgZmdldHMoYnVmZmVyLCBCVUZGRVJfU0laRSwgc3RkaW4pOwogICAgICAgIHdyaXRlKHBpcGVmZFsxXSwgYnVmZmVyLCBCVUZGRVJfU0laRSk7CgogICAgICAgIC8vIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUKICAgICAgICBjbG9zZShwaXBlZmRbMV0pOwoKICAgICAgICAvLyBXYWl0IGZvciB0aGUgY2hpbGQgdG8gZmluaXNoCiAgICAgICAgd2FpdChOVUxMKTsKICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=