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

2024-04-08

我必须复制一个FILE*Mac OS X 上的 C 语言(使用 POSIXint不幸的是,文件描述符一直是不可能的),所以我想出了以下函数:

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

它工作得很好,除了它有一个丑陋的小部分,我再次要求文件模式,因为fdopen显然自己无法确定。

这个问题并不重要,因为基本上,我只是用它来stdin, stdout and stderr(显然我知道这三种的访问模式)。然而,它would如果我自己不必知道的话,那就更优雅了;这可能是可能的,因为dup打电话不需要。

如何确定某个设备的访问模式FILE* stream?


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

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

然后您可以选择适当的模式来传递到fdopen基于是否accmode is O_RDONLY, O_WRONLY, or O_RDWR.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以获得`FILE*`的访问模式吗? 的相关文章

随机推荐