/* * fdopen — завернуть уже открытый низкоуровневый fd в поток FILE* * (Solid-C категория C). Режим должен соответствовать тому, с которым * открывался fd — библиотека проверить это не может. После fdopen * файл закрывается через fclose (не close!): fclose сбросит буфер и * закроет сам fd. Счётчик _fd_guard не трогаем — fd уже посчитан * своим open(). */ #include #include "_file.h" FILE *fdopen(int fd, const char *mode) { if (fd < 0) { errno = EBADF; return 0; } uint8_t ff; if (_file_mode_flags(mode, &ff) < 0) return 0; FILE *fp = _file_slot_take(); if (!fp) return 0; fp->fd = fd; fp->buf = 0; fp->curp = 0; fp->level = 0; fp->hold = EOF; fp->flags = ff; return fp; }