6

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*ストリームのアクセス モードを確認するにはどうすればよいですか?

4

1 に答える 1

7

できませんが、基になるファイル記述子のモードを決定できます。

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

次に、 、、またはにfdopen基づいて、適切なモードを選択して渡すことができます。accmodeO_RDONLYO_WRONLYO_RDWR

于 2012-11-11T05:39:25.760 に答える