Question

Je me sers quelque chose comme ceci:

char *file;
file = (char *)malloc(BUFSIZE * sizeof(char));
printf("Enter the filename:");
scanf("%s", file);
if(remove(file)) {
   printf("Error while removing");
}

J'ai créé deux fichiers:

touch filetobedeleted1.txt
chmod 777 filetobedeleted1.txt

touch filetobedeleted2.txt
chmod 444 filetobedeleted2.txt

Maintenant, mon programme supprime les fichiers mais qui n'est pas censé se produire à droite? Tout le monde sait ce qui ne va pas avec le code?

EDIT: Ajout du code pour mettre le nom dans le fichier ...

Ok ... ressemble tout dépend des permissions sur le répertoire mais alors il un moyen d'utiliser les autorisations de fichiers comme un chèque?

Était-ce utile?

La solution

Dans la sémantique du système de fichiers POSIX, la vérification d'autorisation utilisé pour la suppression d'un fichier est de savoir si vous pouvez écrire dans le répertoire que le fichier est; pas si vous avez la permission d'écriture sur le fichier lui-même.

. (Si le répertoire a le sticky bit, vous devez également être le propriétaire du fichier - /tmp utilise)

Autres conseils

La suppression d'un fichier nécessite seulement un accès en écriture sur le répertoire.

Strictement parlant, ce que vous supprimez est une référence au fichier, un hardlink. Le fichier lui-même ne sera pas supprimé jusqu'à ce que tous les liens vers le fichier sont partis.

Essayez avec la commande rm!

remove() appelle unlink(), et selon man 2 unlink, que seule la nécessité d'écrire des autorisations dans le répertoire parent .

Vous pouvez utiliser la fonction getumask() et lui donner un chèque avant d'appeler remove().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top