I am a bit confused regarding the implementation of stdin. What exactly is it? Is it a pointer? I tried to print the size of stdin using sizeof on a 64 bit machine and got 8. I even de-referenced it using *stdin in the %s specifier and got the not used characters in the input stream( all of them). But if I compare its de referenced value inside if I get an error. I know its an input stream. But how is it implemented?
Here is a sample:
#include<stdio.h>
#include<stdlib.h>
int main(){
    
    char a[10];
    fgets(a,10,stdin);
    printf("a: %s",a);
    
    printf("\nstdin: %s",*stdin);
//if(*stdin=="foo"){
//    printf("True");
//}//Error: invalid operands to binary == (have 'FILE' and 'char *')//and casting to char * doesn't help
    printf("\nSize of stdin: %d\n",sizeof(stdin));
    if(stdin!=NULL){
        printf("This statement is always reached");//always printed even in when input is bigger than 10 chars and otherwise
    }
    
if(!feof(stdin)){
    printf("\nThis statement is also always reached");
}
}
When I input
foobar1234567890
I get the result:
a: foobar123
stdin: 4567890
Size of stdin: 8
This statement is always reached
This statement is also always reached
And when I input
foobar
I get the output
a: foobar
stdin:
Size of stdin: 4
This statement is always reached
This statement is also always reached
I understand that stdin is kind of a FILE pointer, but I don't clearly get it. Could anyone explain the above outputs?
 
     
     
     
     
     
    