2012-11-11 111 views
6

我在Mac OS X(使用POSIX int文件描述符一路是不幸的是沒問題的)C複製一個FILE*,所以我想出了以下功能:我可以獲得`FILE *`的訪問模式嗎?

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

它非常好,除了它有一個小的醜陋的地方,我再次要求文件模式,因爲fdopen顯然無法確定它本身。

這個問題並不重要,因爲基本上,我只是用它stdinstdoutstderr(顯然我知道這三個的接入方式)。不過,如果我自己不需要知道,它會更優雅;這可能是因爲dup調用不需要它。

如何確定FILE*流的訪問模式?

回答

7

你不能,但你可以決定對底層的文件描述符模式:

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

然後,您可以選擇適當的模式傳遞到基於accmode是否fdopenO_RDONLYO_WRONLYO_RDWR

相關問題