我必须在 Mac OS X 上用 C 复制一个 FILE*
(不幸的是,一直使用 POSIX int
文件描述符是不可能的),所以我想到了具有以下功能:
static FILE* fdup(FILE* fp, const char* mode)
{
int fd = fileno(fp);
int duplicated = dup(fd);
return fdopen(duplicated, mode);
}
它工作得很好,除了它有一个 clown 陋的部分,我再次要求文件模式,因为 fdopen
显然不能自己确定它。
这个问题并不重要,因为基本上,我只是将它用于 stdin
、stdout
和 stderr
(显然我知道这三个的访问模式)。但是,如果我不必亲自了解它, 会更优雅;这可能是可能的,因为 dup
调用不需要它。
如何确定FILE*
流的访问模式?
最佳答案
你不能,但你可以确定底层文件描述符的模式:
int fd = fileno(f);
int accmode = fcntl(fd, F_GETFL) & O_ACCMODE;
然后您可以根据 accmode
是否为 O_RDONLY
、O_WRONLY
选择适当的模式传递给 fdopen
, 或 O_RDWR
。
关于我可以获得 `FILE*` 的访问模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328864/