2015-05-04 16 views
6

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?

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.