простой. измените строку на:
write(the_pipe_1[1], input, 20);
, и она работает нормально.
Объяснение: Когда вы приводите input (обычно это 32-битный указатель) к char (который является 8-битным), вы создали указатель на недопустимый адрес. При некоторых доступах это может вызвать ошибку сегментации. Например, вы можете попробовать:
//segmentation fault
printf("input - %s\n", (char)input);
, но для write (), которая работает по-другому (не вдаваясь в причины), это привело к зависанию программы вместо
PS. эта строка никогда не будет истинной:
if(pal == "0")