我可以获得 `FILE*` 的访问模式吗?

标签 c macos file-io posix

我必须在 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 显然不能自己确定它。

这个问题并不重要,因为基本上,我只是将它用于 stdinstdoutstderr(显然我知道这三个的访问模式)。但是,如果我不必亲自了解它, 会更优雅;这可能是可能的,因为 dup 调用不需要它。

如何确定FILE* 流的访问模式?

最佳答案

你不能,但你可以确定底层文件描述符的模式:

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

然后您可以根据 accmode 是否为 O_RDONLYO_WRONLY 选择适当的模式传递给 fdopen , 或 O_RDWR

关于我可以获得 `FILE*` 的访问模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328864/

相关文章:

python - 类似于 OS X 上的 pyHook

c++ - 如何读取 infile 中的指令,然后使用 infile 中的参数将函数形状写入 outfile

c - Valgrind 报告 SIGSEGV 和未初始化值的使用

c - 指针赋值 "*foo++ = *bar++; "在 C 中有什么作用?

C语言编程——数组转字符串

java - 如何将 picoCLI 项目变成命令?

python - 可以使用 cx_freeze 在 mac os x 中卡住 python3.1 脚本吗?

c++ - C 风格、C++ 流或 Win32 API 文件 I/O?

file - 如何检查给定路径是文件还是目录?

c++ - 在堆栈上分配不完整类型