#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
/* open/read/write/close */
#include <fcntl.h>
/** Named pipe used to communicate with process3 */
char * write_pipe = "/tmp/process2pipe";
+ /** Descriptor of input pipe */
int read_descriptor;
+
+ /** Descriptor of output pipe */
int write_descriptor;
-
+
+ /**
+ * Buffer used for storing data from input pipe.
+ * Data is stored in chunks of BUFFER_STEP size.
+ * If data during reading is bigger than this value, then number of
+ * characters is saved, and buffer is cleared for reading another chunk.
+ */
char buffer[BUFFER_STEP];
-
+
+ /** Index used when iterating buffer */
int i = 0;
+
+ /** Stores number of bytes read from input pipe in current iteration */
ssize_t count = 0;
/* Reading from process1 */
/* Writing to process2 */
mkfifo(write_pipe, 0666);
write_descriptor = open(write_pipe, O_WRONLY);
-
+
int number_of_characters = 0;
-
- do {
+
+ fprintf(stderr, "[%s] Init!\n", "process2");
+
+ while(1) {
/* Read data from input pipe */
count = read(read_descriptor, buffer, BUFFER_STEP);
- printf("fetched: %d bytes\n", count);
+ fprintf(stderr, "[%s] Fetched: %d bytes\n", "process2", 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));
+ for (i = 0; i < count; i++, number_of_characters++) {
+ if (buffer[i] == '\n') {
+ fprintf(stderr, "[%s] Calculated: %d characters. Sending...\n", "process2", 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);
+ else {
+ break;
+ }
+ }
close(read_descriptor);
close(write_descriptor);