W systemie plików doładowania znajduje się funkcja create_directory
, która tworzy katalog. Jak mogę utworzyć plik? Mogę go utworzyć, definiując obiekt boost::filesystem::ofstream
, ale to również otworzy plik, więc będę musiał zadzwonić pod numer close
, zanim będę mógł zrobić inne rzeczy, na przykład zmienić nazwę lub usunąć. Czy to jedyny sposób?Jak utworzyć plik z systemem plików doładowania bez jego otwierania?
6
A
Odpowiedz
5
System plików doładowania V3 nie zapewnia funkcji touch(1)
;
Nawet touch
będzie creat + zamknąć plik, wystarczy spojrzeć na wyjściu strace
:
open("/tmp/q", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 47
dup2(47, 0) = 0
close(47) = 0
utimensat(0, NULL, NULL, 0) = 0
Myślę, że najbardziej rozsądnym wyborem jest po prostu utworzyć funkcję otoki, który zamyka plik.
1
Można po prostu użyć czegoś podobnego
// ... code ...
boost::filesystem::ofstream("/path/to/file");
boost::filesystem::rename("/path/to/file", "/path/to/renamed_file");
// ... code ...
który będzie utworzyć pusty plik i natychmiast zmienić jego nazwę, bez konieczności zamykania go w dowolnym momencie.