Witam,
Zagadnienie nad jakim sie głowię wygląda następująco. Program(pod linuxem) może przyjmować dane z potoku.
Przykład:
1. $echo "Hello World" | ./a.out
2. Hello World
3. $./a.out
4. $
Zrealizowanie pierwszych dwóch linii nie jest problemem, taki potok jest 'potokiem nazwanym' i wystarczy odczytac to jest w pliku /dev/stdin
Realizuje to zagadnenie nastepujacy kod:
#include <stdio.h>
#include <stdlib.h>
#define BUFFERSIZE 1
int main(int argc, char **argv){
unsigned char buffer[BUFFERSIZE];
FILE *instream;
int bytes_read=0;
int buffer_size=0;
buffer_size=sizeof(unsigned char)*BUFFERSIZE;
/* open stdin for reading */
instream=fopen("/dev/stdin","r");
/* did it open? */
if(instream!=NULL){
/* read from stdin until it's end */
while((bytes_read=fread(&buffer, buffer_size, 1, instream))==buffer_size){
fprintf(stdout, "%c", buffer[0]);
}
}
/* if any error occured, exit with an error message */
else{
fprintf(stderr, "ERROR opening stdin. aborting.\n");
exit(1);
}
}//main
Jednak to co mnie interesuje to linijka 3 i 4 czyli aby program, jesli nie ma nic na wejsciu z potoku
czyli jesli nie ma nic w pliku /dev/stdin zakonczyl dzialanie i nie podejmowal interakcji w postaci oczekiwania na wprowadzenie danych. Oczywiscie to ze nie ma nic w pliku nie oznacza, ze funkcja dostanie znak konca pliku. Nie mam pomyslu jak to zrealizowac.