При создании файла open() требуется дополнительный аргумент, бит разрешения для создаваемого файла. Вам нужно сделать, например.
if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT, 0644) == -1)
Это не может быть причиной ошибки вы получаете, однако, если ошибка не является «Нет такого файла или каталога», то это именно то, что это не так, вы программа не может найти файл.
Возможно, у вас есть некоторые непечатаемые символы в имени файла, или имя заканчивается пробелом или новой линией или аналогичным, или вы неправильно написали имя или имели неправильный случай, или путь является относительным путем, который не соответствует файлу на основе текущего рабочего каталога вашего процесса.
Часто полезно печатать имя файла внутри пары '', поэтому вы можете увидеть, есть ли какие-то пробелы, которых не должно быть. добавить
printf("Filename: '%s'\n",redirect_ptr[0]);
к вашему коду. И если он выглядит хорошо, сделайте ls -l на имя файла, которое он распечатает, и он находится в рабочем каталоге процесса.
У вас есть файл, который вы хотите открыть? .. – piokuc
Да, он должен его создать в любом случае – user44273
добавить отладочную печать имени файла – bobah