X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fprocess1.c;h=d514b03e38daa000c379cc21e9c43212576eb2c6;hb=eb929ae1b11dc0dba139ae4ae2a45f00ff654621;hp=695e887dac25e846a2ddc8476791e587ba5326f2;hpb=fe306b90adcee352d3da4ba0842afac66ba3d751;p=wsti_so.git diff --git a/src/process1.c b/src/process1.c index 695e887..d514b03 100644 --- a/src/process1.c +++ b/src/process1.c @@ -2,12 +2,15 @@ #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 reads entire lines of text from the standard input and returns them - * on the standard output without changing anything. + * Program reads entire lines of text from the standard input and pass them + * to the process2 using created pipe. */ int main(void) { /** Currently fetched from stdin character */ @@ -19,13 +22,26 @@ int main(void) { /** Current buffer length*/ int buffer_length = 0; - /* Index of the current character */ + /** Index of the current character */ int i = 0; - - /** Temporary buffer used as a proxy between + + /** + * Temporary buffer used as a proxy between * checking memory allocation and copying data to real buffer */ - char *tmp = NULL; + char * tmp = NULL; + + /** Named pipe used to communnicate with process2 */ + char * write_pipe = "/tmp/process1pipe"; + + /** File descriptor of pipe */ + int file_descriptor; + + mkfifo(write_pipe, 0666); + + file_descriptor = open(write_pipe, O_WRONLY); + + fprintf(stderr, "[%s] Init!\n", "process1"); do { c = fgetc(stdin); @@ -48,14 +64,17 @@ int main(void) { } /* - * 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) { - fprintf(stdout, "%s\n", buffer); + if (c == 10 && (i != 0)) { + buffer[i] = '\n'; + write(file_descriptor, buffer, strlen(buffer)); + fprintf(stderr, "[%s] buffer: %s/%d\n", "process1", buffer, strlen(buffer)); buffer_length = 0; i = 0; @@ -71,7 +90,7 @@ int main(void) { buffer = tmp; buffer[i] = c; - /* Used for debug..*/ + /* Used only for debugging..*/ /* printf("c: %c/%d, i: %d, bl: %d\n", c, c, i, buffer_length); */ @@ -79,7 +98,10 @@ int main(void) { } } } while(c != EOF); - + + close(write_pipe); + unlink(write_pipe); + if (buffer) { free(buffer); buffer = NULL;