From eb58b0955c4340aafb4508e9c269b3216b2c1c1f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20D=C5=82ugo=C5=82=C4=99cki?= Date: Tue, 17 Jun 2014 02:17:17 +0200 Subject: [PATCH] Working communication between process1&process2. --- src/process1.c | 14 +++++------ src/process2.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 src/process2.c diff --git a/src/process1.c b/src/process1.c index 9374646..4933b62 100644 --- a/src/process1.c +++ b/src/process1.c @@ -32,14 +32,14 @@ int main(void) { char * tmp = NULL; /** Named pipe used to communnicate with process2 */ - char * fifo = "/tmp/process1fifo"; + char * write_pipe = "/tmp/process1pipe"; /** File descriptor of pipe */ int file_descriptor; - mkfifo(fifo, 0666); + mkfifo(write_pipe, 0666); - file_descriptor = open(fifo, O_WRONLY); + file_descriptor = open(write_pipe, O_WRONLY); do { c = fgetc(stdin); @@ -70,8 +70,8 @@ int main(void) { */ if (c == 10) { buffer[i] = '\n'; - write(file_descriptor, buffer, ++buffer_length); - /*fprintf(stdout, "%s\n", buffer);*/ + write(file_descriptor, buffer, strlen(buffer)); + fprintf(stdout, "buffer: %s/%d\n", buffer, strlen(buffer)); buffer_length = 0; i = 0; @@ -96,8 +96,8 @@ int main(void) { } } while(c != EOF); - close(fifo); - unlink(fifo); + close(write_pipe); + unlink(write_pipe); if (buffer) { free(buffer); diff --git a/src/process2.c b/src/process2.c new file mode 100644 index 0000000..4309e0c --- /dev/null +++ b/src/process2.c @@ -0,0 +1,64 @@ +#include +#include +#include + +/* open/read/write/close */ +#include + +/** If buffer is too small to hold entire string, it is incremented by this value */ +#define BUFFER_STEP 16 + +/** + * Program grabs data from process1, calculates number of characters in each line + * and pass the value to process3. + */ +int main(void) { + /** Named pipe used to communicate with process1 */ + char * read_pipe = "/tmp/process1pipe"; + + /** Named pipe used to communicate with process3 */ + char * write_pipe = "/tmp/process2pipe"; + + int read_descriptor; + int write_descriptor; + + char buffer[BUFFER_STEP]; + + int i = 0; + ssize_t count = 0; + + /* Reading from process1 */ + read_descriptor = open(read_pipe, O_RDONLY); + + /* Writing to process2 */ + mkfifo(write_pipe, 0666); + write_descriptor = open(write_pipe, O_WRONLY); + + int number_of_characters = 0; + + do { + /* Read data from input pipe */ + count = read(read_descriptor, buffer, BUFFER_STEP); + + printf("fetched: %d bytes\n", count); + + if (count > 0) { + int j = 0; + for (; j < count; j++, number_of_characters++) { + if (buffer[j] == '\n') { + fprintf(stderr, "Writting about: %d\n", number_of_characters); + write(write_descriptor, number_of_characters, sizeof(number_of_characters)); + write(write_descriptor, '\n', 1); + number_of_characters = 0; + } + } + + } + } while(count > 0); + + close(read_descriptor); + close(write_descriptor); + unlink(write_descriptor); + + return 0; +} \ No newline at end of file -- 2.30.2