Estoy usando glib en mi aplicación, y veo que hay envolturas de conveniencia en glib para C remove
, unlink
y rmdir
. Pero estos solo funcionan en un solo archivo o directorio a la vez.Cómo caminar un directorio en C
Por lo que puedo ver, ni el estándar C ni el glib incluyen ningún tipo de funcionalidad de recorrido recíproco de directorio. Tampoco veo ninguna forma específica de eliminar un árbol de directorios completo a la vez, como con rm -rf
.
Por lo que estoy haciendo esto no estoy preocupado por ninguna complicación como permisos, enlaces simbólicos de respaldo al árbol (recursión infinita), o cualquier cosa que descarte una implementación muy ingenua ... así que no estoy reacio a escribir mi propia función para ello.
Sin embargo, tengo curiosidad por saber si esta funcionalidad ya existe en alguna parte de las bibliotecas estándar gtk o glib (o en alguna otra biblioteca C fácilmente reutilizable) y no me he topado con ella. Buscar en Google este tema genera muchas pistas falsas.
De lo contrario mi plan es utilizar este tipo de algoritmo:
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);
Obviamente construirían en alguna manejo de errores y similares para abortar el proceso tan pronto como se detecta un error fatal.
técnicamente solo 'remove()' está en el estándar C, los otros 2 son POSIX :) –
Es bueno saberlo, gracias. – mlibby
Además de las respuestas existentes, tenga en cuenta que no se debe simplemente * llevar un directorio * a Mordor, ya sea en C o en cualquier otro idioma. –