so.txt пуст, потому что stdout не сбрасывался до сбоя, поэтому буферизованное содержимое было потеряно.Если вы добавите: fflush (stdout);между командами printf он будет содержать ожидаемый текст.
В вашем файле soe.txt отсутствует также сообщение «Ошибка сегментации», поскольку оно было напечатано оболочкой, а не вашей программой и, следовательно, не былочасть вывода вашей программы, которая должна была быть перенаправлена.
Если вы не можете изменить код, вы можете включить буферизацию строки, обманув программу, думая, что она печатает в tty.Создайте сценарий error.sh:
#!/bin/sh
./error.o
Затем выполните chmod a + x error.sh и назовите его так в Linux:
script soe.txt -c ./error.sh
Или так в OS X:
script soe.txt ./error.sh
Точный вывод в некоторой степени зависит от системы, но, вероятно, будет содержать «Hello World» и «Ошибка сегментации».
Также рассмотрите возможность добавления соответствующих строк #include и возврата значения из main.