Примечание: вопрос был значительно изменен с момента написания этого ответа.
С чего начать?
main()
возвращает int
.
pipefd
не инициализирован.
- Вы закрываете случайный файловый дескриптор.
- Вы вызываете
recvfd()
для другого случайного файлового дескриптора.
- Вы не возвращаете значение из
main()
.
- Вы не используете значение
#define
.
- Вы не показываете
#include
файлы, необходимые для компиляции.
- Неиспользуемая переменная
fd
.
- Неиспользуемая переменная
statbuf
.
- Не проверяемое возвращаемое значение
i
.
Основная проблема - использование неинициализированных переменных.
Дополнительная проблема - ограниченная проверка ошибок.
Дополнительная проблема: концептуально вам нужен сервер, которому можно передать дескриптор файла. Вам нужен этот сервер для чтения из файлового дескриптора, который могут создавать другие (не связанные) процессы. Вам нужно будет внимательно изучить руководства, но, возможно, потребуется сервер, прослушивающий сокет домена Unix или, возможно, читающий (именованный) FIFO. Затем другие программы могут открыть сокет или FIFO и отправить собственный дескриптор файла на сервер.