Używam glib w mojej aplikacji i widzę, że w glib znajdują się opakowania po stronie wygody dla C: remove
, unlink
i rmdir
. Ale działają one tylko na pojedynczym pliku lub katalogu na raz.Jak przejść do katalogu w C
O ile widzę, ani standard C, ani glib nie zawierają żadnej funkcji rekursywnego chodzenia do katalogu. Nie widzę też żadnego konkretnego sposobu na usunięcie całego drzewa katalogów na raz, tak jak w przypadku rm -rf
.
Za to, co robię, nie martwię się żadnymi komplikacjami, takimi jak uprawnienia, dowiązania symboliczne tworzą kopię zapasową drzewa (nieskończona rekursja) lub cokolwiek, co wyklucza bardzo naiwne wdrożenie ... więc nie jestem nie podoba mi się napisanie mojej własnej funkcji.
Jednak jestem ciekawy, czy ta funkcjonalność jest gdzieś w standardowych bibliotekach gtk lub glib (lub w jakiejś innej łatwo używanej bibliotece C), a ja po prostu nie natknąłem się na to. Googling w tym temacie generuje wiele fałszywych tropów.
przeciwnym razie mój plan jest do korzystania z tego rodzaju algorytmu:
dir_walk(char* path, void* callback(char*) {
if(is_dir(path) && has_entries(path)) {
entries = get_entries(path);
for(entry in intries) { dir_walk(entry, callback); }
}
else { callback(path) }
}
dir_walk("/home/user/trash", remove);
Oczywiście chciałbym zbudować w pewnym obsługi błędów i tym podobne, aby przerwać proces tak szybko, jak to błąd krytyczny spotyka.
technicznie tylko 'remove()' jest w standardzie C, pozostałe 2 to POSIX :) –
Dobrze wiedzieć, dziękuję. – mlibby
Oprócz istniejących odpowiedzi, należy pamiętać, że nie wystarczy po prostu * przejść do katalogu * w Mordorze, czy to w języku C, czy w jakimkolwiek innym języku. –