Usar fseek con un puntero de archivo que apunta a stdin

Dependiendo de los argumentos de la línea de comandos, estoy configurando un puntero de archivo para que apunte hacia un archivo específico o stdin (con el fin de canalizar). Luego paso este puntero a varias funciones diferentes para leer desde el archivo. Aquí está la función para obtener el puntero del archivo:

FILE *getFile(int argc, char *argv[]) {
    FILE *myFile = NULL;
    if (argc == 2) {
        myFile = fopen(argv[1], "r");
        if (myFile == NULL)
           fprintf(stderr, "File \"%s\" not found\n", argv[1]);
    }
    else
        myFile = stdin;
    return myFile;
}

Cuando apunta a stdin,fseek no parece funcionar Con eso quiero decir que lo uso y luego usofgetc y obtengo resultados inesperados. ¿Es este comportamiento esperado, y si es así, cómo me muevo a diferentes ubicaciones en la transmisión?

Por ejemplo:

int main(int argc, char *argv[]) {
    FILE *myFile = getFile(argc, argv); // assume pointer is set to stdin
    int x = fgetc(myFile); // expected result
    int y = fgetc(myFile); // expected result
    int z = fgetc(myFile); // expected result

    int foo = bar(myFile); // unexpected result

    return 0;
}

int bar(FILE *myFile) {
    fseek(myFile, 4, 0);
    return fgetc(myFile);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta