title: Read from file or stdin
body: <p>I am writing a utility which accepts either a filename, or reads from stdin.</p>
  
  <p>I would like to know the most robust / fastest way of checking to see if stdin exists (data is being piped to the program) and if so reading that data in.  If it doesn't exist, the processing will take place on the filename given.  I have tried using the following the test for size of <code>stdin</code> but I believe since it's a stream and not an actual file, it's not working as I suspected it would and it's always printing <code>-1</code>.  I know I could always read the input 1 character at a time while != EOF but I would like a more generic solution so I could end up with either a fd or a FILE* if stdin exists so the rest of the program will function seamlessly.  I would also like to be able to know its size, pending the stream has been closed by the previous program.</p>
  
  <pre><code>long getSizeOfInput(FILE *input){
    long retvalue = 0;
    fseek(input, 0L, SEEK_END);
    retvalue = ftell(input);
    fseek(input, 0L, SEEK_SET);
    return retvalue;
  }
  
  int main(int argc, char **argv) {
    printf("Size of stdin: %ld\n", getSizeOfInput(stdin));
    exit(0);
  }
  </code></pre>
  
  <p>Terminal:</p>
  
  <pre><code>$ echo "hi!" | myprog
  Size of stdin: -1
  </code></pre>