muszę powielić FILE*
w C na Mac OS X (przy użyciu POSIX int
deskryptorów plików przez całą drogę jest niestety wykluczone), więc wymyśliłem następującą funkcję:Czy mogę uzyskać tryb dostępu do pliku `FILE *`?
static FILE* fdup(FILE* fp, const char* mode)
{
int fd = fileno(fp);
int duplicated = dup(fd);
return fdopen(duplicated, mode);
}
działa bardzo dobrze , z tą różnicą, że ma tę brzydką część, w której ponownie pytam o tryb plików, ponieważ prawdopodobnie nie można go samemu określić.
Ten problem nie jest krytyczny, ponieważ w zasadzie używam go tylko dla stdin
, stdout
i stderr
(i oczywiście znam tryby dostępu tych trzech). Jednak byłoby to bardziej eleganckie, gdybym nie musiał sam tego wiedzieć; i jest to prawdopodobnie możliwe, ponieważ wywołanie dup
nie jest potrzebne.
Jak określić tryb dostępu strumienia FILE*
?