Usando fseek com um ponteiro de arquivo que aponta para stdin

Dependendo dos argumentos da linha de comando, estou configurando um ponteiro de arquivo para apontar para um arquivo especificado ou stdin (para fins de canalização). Depois, passo esse ponteiro para várias funções diferentes para ler no arquivo. Aqui está a função para obter o ponteiro do arquivo:

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;
}

Quando está apontando para stdin,fseek parece não funcionar. Com isso, quero dizer, eu uso e depois usofgetc e recebo resultados inesperados. Esse comportamento é esperado e, em caso afirmativo, como me movo para diferentes locais no fluxo?

Por exemplo:

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);
}

questionAnswers(2)

yourAnswerToTheQuestion