2012-11-11 6 views
6

私は(POSIX intファイル記述子を使用してすべての道は論外残念なことにある)は、Mac OS X上で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(明らかに私はこれらの3つのアクセスモードを知っています)のために使用しています。しかし、と私はそれを自分で知る必要がなければ、よりエレガントになります。これは恐らくdupコールがそれを必要としないので可能です。

FILE*ストリームのアクセスモードを確認するにはどうすればよいですか?

答えて

7

あなたがすることはできませんが、基本的なファイルディスクリプタのためのモードを決定することができます

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

あなたはその後、accmodeO_RDONLYO_WRONLY、またはO_RDWRであるかどうかに基づいてfdopenに渡す適切なモードを選択することができます。

関連する問題