В головном процессе интерпретатора командного языка файлом стандартного ввода является клавиатура, а файлами стандартного вывода и вывода диагностических сообщений - экран терминала. Их можно изменить, тогда интерпретатор перед выполнением системного вызова exec открывает указанные файлы, подменяя смысл дескрипторов 1, 2, 3.
Конечно то же самое может проделать и другая программа, запускающая третью программу в специально созданном процессе. Все что нужно для нормального функционирования механизма перенаправления ввода/вывода - это придерживаться при программировании соглашения об использовании дескрипторов stdin, stdout, stderr. В наиболее распространенные ф-ях библиотеки ввода/вывода printf - stdout, scanf - stdin, error - stderr вообще не требуется указывать дескриптор файла.