Okay, mkstemp
to preferowany sposób tworzenia pliku tymczasowego w POSIX.Jak utworzyć std :: ofstream do pliku tymczasowego?
Ale otwiera plik i zwraca int
, który jest deskryptorem pliku. Z tego mogę utworzyć tylko PLIK *, ale nie std::ofstream
, który wolałbym w C++. (Wydaje się, że w systemie AIX oraz niektórych innych systemów, można stworzyć std::ofstream
z deskryptora pliku, ale mój kompilator narzeka, gdy próbuję tego.)
wiem, mogę dostać nazwę pliku temp z tmpnam
a następnie otworzyć własną rękę ofstream z nim, ale to najwyraźniej niebezpieczna z powodu warunków wyścigowych i powoduje kompilator ostrzegawcze (g ++ v3.4 Linux.):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Więc jest jakiś przenośny sposób stworzyć std::ofstream
do temp plik?
To nie kompiluje się z moim g ++ v3.4.4 na Linux. Podobno tylko niektóre platformy mają tę funkcję. – Frank
Dzięki! Dla twojej drugiej metody (przy użyciu mkstemp, a następnie dla strumienia): Czy to nadal jest wydajne pod względem I/O? To spowoduje dwukrotny dostęp do systemu plików, prawda? Nasz system plików działa bardzo wolno i obawiam się, że spowoduje to niepotrzebne obciążenie. – Frank
Strdup nie jest przenośny, albo ... – Sol