FILE*Mac OS X の C でa を複製する必要があるため(int残念ながら、POSIX ファイル記述子をずっと使用することは問題外です)、次の関数を思いつきました。
static FILE* fdup(FILE* fp, const char* mode)
{
int fd = fileno(fp);
int duplicated = dup(fd);
return fdopen(duplicated, mode);
}
fdopenどうやらそれ自体を決定できないため、ファイルモードを再度要求する小さな醜い部分があることを除いて、それは非常にうまく機能します。
この問題は重要ではありません。基本的にはstdin、 、stdoutおよびに使用しているだけだからですstderr(明らかに、これら 3 つのアクセス モードを知っています)。ただし、自分で知る必要がなければ、よりエレガントになります。dup呼び出しには必要ないため、これはおそらく可能です。
FILE*ストリームのアクセス モードを確認するにはどうすればよいですか?