Используйте системный вызов dup2(2)
для дескриптора 0
(stdin) и для дескриптора, возвращаемого open(2)
для datafile
:
int fd = open("datafile", O_RDONLY);
dup2(fd, 0);
/* reading from stdin now is in fact reading from datafile */
Конечно, вам нужна некоторая проверка ошибокв реальной программе.
Чтобы реализовать поведение подстановочных знаков, вы можете обратиться к библиотечной функции readdir(3)
.