Могу ли я получить режим доступа к " файлу*"?

Я должен дублировать FILE* В C на Mac OS X (используя POSIX int файловые дескрипторы полностью, К сожалению, не обсуждаются), поэтому я придумал следующую функцию:

static FILE* fdup(FILE* fp, const char* mode)
{
    int fd = fileno(fp);
    int duplicated = dup(fd);
    return fdopen(duplicated, mode);
}

он работает очень хорошо, за исключением того, что у него есть маленькая уродливая часть, где я снова прошу режим файла, потому что fdopen по-видимому, не может определить это сам.

эта проблема не критична, так как в основном я просто использую ее для stdin, stdout и stderr (и, очевидно, я знать режимы доступа этих трех). Однако это б будь элегантнее, если бы я не знал этого сам; и это, вероятно, возможно, так как dup звонить не надо.

как я могу определить режим доступа FILE* поток?

1 ответов


вы не можете, но вы можете определить режим для базового дескриптора:

int fd = fileno(f);
int accmode = fcntl(fd, F_GETFL) & O_ACCMODE;

затем вы можете выбрать соответствующий режим для перехода в fdopen зависимости accmode и O_RDONLY, O_WRONLY или O_RDWR.