bin_PROGRAMS = \
bin/process1 \
- bin/process2
+ bin/process2 \
+ bin/process3
bin_process1_SOURCES = \
src/process1.c
bin_process2_SOURCES = \
src/process2.c
+
+bin_process3_SOURCES = \
+ src/process3.c
}
/*
- * If there were no errors parse data.
+ * If there were no errors or it was not just an empty newline:
+ * parse data.
*/
- if (c != EOF) {
+ if (c != EOF || ((i == 0) && (c == 10))) {
/* If newline has been found
* return entire string and release the memory
*/
- if (c == 10) {
+ if (c == 10 && (i != 0)) {
buffer[i] = '\n';
write(file_descriptor, buffer, strlen(buffer));
- fprintf(stdout, "buffer: %s/%d\n", buffer, strlen(buffer));
+ fprintf(stderr, "[%s] buffer: %s/%d\n", "process1", buffer, strlen(buffer));
buffer_length = 0;
i = 0;
/* Writing to process2 */
mkfifo(write_pipe, 0666);
write_descriptor = open(write_pipe, O_WRONLY);
-
+
int number_of_characters = 0;
- do {
+ 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);
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* open/read/write/close */
+#include <fcntl.h>
+
+/** 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/process2pipe";
+
+ int read_descriptor;
+
+ int buffer = 0;
+
+ int i = 0;
+ ssize_t count = 0;
+
+ /* Reading from process2 */
+ read_descriptor = open(read_pipe, O_RDONLY);
+
+ int number_of_characters = 0;
+
+ while(1) {
+ /* Read data from input pipe */
+ count = read(read_descriptor, &buffer, sizeof(int));
+
+ fprintf(stderr, "[%s] Fetched: %d bytes\n", "process3", count);
+
+ if (count > 0) {
+ fprintf(stderr, "[%s] Process2 send: %d\n", "process3", buffer);
+ }
+ else {
+ break;
+ }
+ }
+
+ close(read_descriptor);
+
+ return 0;
+}
\ No newline at end of file