Хм, ... причина вашей ошибки сегментации здесь:
buf = fgets(p,30,pipe_read);
p - указатель, по сути, ни на что не похожий.Это содержимое того, что находится в стеке во время выполнения, вы никогда не инициализируете его.Вам нужно указать на часть памяти, которую вы можете использовать!Назначьте возврат вызова malloc()
или объявите его как char p[LEN]
.
Редактировать: вы также открываете уже открытые дескрипторы файлов.Посмотрите документацию по fgets
и pipe
, я думаю, вы не понимаете, как они работают.
Теперь, несмотря на это, поток вашей функции немного запутан.Попробуйте работать над разъяснением этого!Помните, что код предназначен для выражения намерений, идей функциональности.Попробуйте использовать карандаш и бумагу для организации вашей программы, а затем напишите ее в виде реального кода:).
Cheers!