X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fprocess1.c;h=f4a1392d84398e72d440e0d63cfb6b64690b46a7;hb=a5d6603b22bfb2332b084726633f6d13abc1d484;hp=695e887dac25e846a2ddc8476791e587ba5326f2;hpb=fe306b90adcee352d3da4ba0842afac66ba3d751;p=wsti_so.git diff --git a/src/process1.c b/src/process1.c index 695e887..f4a1392 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,14 +22,25 @@ 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); + do { c = fgetc(stdin); @@ -48,14 +62,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; @@ -79,7 +96,10 @@ int main(void) { } } } while(c != EOF); - + + close(write_pipe); + unlink(write_pipe); + if (buffer) { free(buffer); buffer = NULL;