scanf() lee de un
stream, un archivo es un stream y la entrada standard (stdin) también.
Así que si yo hago:
Código:
FILE * stream;
int entero;
stream = fopen("Archivo.txt", "r")
fscanf(stream, "%d", &entero);
stream = stdin;
fscanf(stream, "%d", &entero);
El primer fscanf va a leer desde Archivo.txt y el segundo desde el teclado. Si la entrada es redirigida con "<" entonces el primer scanf sigue leyendo de Archivo.txt pero el segundo lee del archivo redirigido.
Ahora si lo que querés hacer es lo contrario, se complica ya que desde el punto de vista del programa la entrada ya viene redirigida. No hay manera de hacer que stdin vuelva a apuntar al teclado. De hecho, para el programa no hay manera de distinguir si viene de un archivo o del teclado (justo ahí está la gracia de la redirección).
De todos modos, si mal no recuerdo en C hay funciones que leen directo de teclado, no de la entrada standard. Obvio que esas funciones no se pueden redirigir.