我必须复制一个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(使用前将#替换为@)