Кажется, здесь есть некоторая путаница: что вы ожидаете
cat `./my_program`
для производства?
my_program
копирует стандартный ввод в стандартный вывод в бесконечном цикле, даже послеДостигнув конца файла, который вы не тестируете, и получая неожиданный вывод.
Оболочка собирает этот вывод либо в файл, в псевдотерминал или, возможно, через канал и после завершения передает егоcat
в качестве аргументов командной строки, но, поскольку для завершения вывода необходимо убить my_program
, оболочка также прервет эту операцию.
cat
ожидает, что параметры и имена файлов будут использоваться в качестве аргументов командной строки, вероятноне то, что вы вводите.
Что касается изменения настроек терминала, вы можете использовать STDIN_FILENO
или просто 0
вместо STDOUT_FILENO
, так как вы хотите изменить поведение дескриптора ввода.