J'écris un programme C ++ sur Linux (Ubuntu). Je voudrais supprimer le contenu d'un répertoire. Il peut s'agir de fichiers lâches ou de sous-répertoires.
essentiellement, je voudrais faire quelque chose d'équivalent à p> pouvez-vous suggérer la meilleure façon de le faire en C ++ avec les en-têtes requis.
Est-il possible de le faire avec SYS / STAT.H ou SYS / TYES.H ou SYS / DIR.H ?! P> P>
3 Réponses :
boost retirer_all http: //www.boost .ORG / DOC / LIBS / 1_31_0 / LIBS / FILETYSTEM / DOC / INDEX.HTM P>
system ("rm -rf <path-to-directory>");
gros risque de sécurité géant
Ce n'est pas un risque de sécurité, plus de la question est. OP a demandé l'équivalent de rm -rf
Je viens de rencontrer cette publication. Pourquoi est-ce un risque de sécurité?
Ram Bhat, ce n'est pas un risque de sécurité. SEHE appelle cela un risque de «sécurité», faisant probablement référence à la possibilité que vous puissiez taper accidentellement quelque chose comme "sudo rm -rf /" pendant que vous vouliez faire autre chose
C'est un risque de sécurité, si l'utilisateur peut contrôler l'argument, ce qui pourrait être quelque chose comme foo; echo 'commande injection 101' code>
@Domen: Si l'utilisateur contrôle les arguments avec la solution acceptée, il peut déjà effacer tout le système, alors ...
@Static_RTTI souhaitant que la fonctionnalité souhaitait "supprimer tout dans un répertoire", système code> ici vous donnera potentiellement une exécution de code arbitraire. Je conviens que l'argument de chemin si fourni de l'extérieur (et même si non!) Devrait probablement d'abord être résolu par
realpath coché>, puis coché si de commencer les correspondances autorisées commencées et que NFTW +Link Way serait utilisée.
En d'autres termes: Je crois que c'est un bogue de sécurité, lorsque ma personnalisation "RM" a également la capacité d'exécuter les arguments.
Utilisez le si vous ne souhaitez pas supprimer le répertoire de base lui-même, changez le NFTW () Code>
(File Tree Walk) fonction, avec le drapeau ftw_depth code>. Fournissez un rappel qui appelle simplement
Supprimer () code> sur le fichier transduit:
Unlink_CB () Code> Fonction Pour vérifier le niveau: P>
int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
int rv;
if (ftwbuf->level == 0)
return 0;
rv = remove(fpath);
if (rv)
perror(fpath);
return rv;
}
Vous devez également ajouter le drapeau FTW_PHYS pour gérer correctement les liens symboliques (ce qui signifie ne les suivez pas).
Qu'est-ce qui joue le rôle de "-f" dans ce code? Et si vous voulez juste un "RM -R" régulier?
@STICTIC_RTTI: Si vous voulez juste que vous ne voulez que régulier -r code>, vous devez rechercher spécifiquement des fichiers non insuffisants et inviter l'utilisateur à les supprimer.