OVH Cloud OVH Cloud

Probleme lors d un 'remove' (en C)

3 réponses
Avatar
DLPnet
Bonjour



je suis sur Tiger (mais j ai le meme probleme avec les autres versions
de l OS) et j utilise la fonction 'remove' en C.
Je manipule un bon nombre de fichier, j ouvre, je ferme, j efface, ...
rapidement. Et dans certains cas le remove me renvoie une erreur 89 et n
efface pas le fichier du tout. Ce fichier fait partie d une liste de
plusieurs fichiers, et est efface comme tous les autres dans une boucle.
Ce n est jamais le meme fichier qui provoque cette erreur et ce n est
pas systematique.

Tous les fichiers sont bien ouverts et bien refermes avant le remove
donc je ne comprends pas le probleme.


Auriez vous une idee ou une piste ou quoique se soit ? :)

Merci,

Dlp

3 réponses

Avatar
Schmurtz
DLPnet wrote:

je suis sur Tiger (mais j ai le meme probleme avec les autres versions
de l OS) et j utilise la fonction 'remove' en C.
Je manipule un bon nombre de fichier, j ouvre, je ferme, j efface, ...
rapidement. Et dans certains cas le remove me renvoie une erreur 89 et n
efface pas le fichier du tout. Ce fichier fait partie d une liste de
plusieurs fichiers, et est efface comme tous les autres dans une boucle.
Ce n est jamais le meme fichier qui provoque cette erreur et ce n est
pas systematique.


Desole, je n'est jamais utilise cette fonction. Mais essai toujours avec
la fonction unlink (fonction POSIX), qui permet de supprimer un fichier.

--
Schmurtz

Avatar
Eric Lévénez
Le 12/07/05 16:41, dans <42d3d6ad$0$10756$,
« Schmurtz » a écrit :

Desole, je n'est jamais utilise cette fonction. Mais essai toujours avec
la fonction unlink (fonction POSIX), qui permet de supprimer un fichier.


Non, la fonction POSIX 1003.1 pour supprimer un fichier est remove, pas
unlink. Il a existé un temps où cet appel système était disponible en tant
que commande unix. C'était une commande très dangereuse car on pouvait par
exemple supprimer un des 2 liens d'un répertoire le rendant inutilisable.
C'était plus une commande servant à corriger le nombre de lien d'un
répertoire quand un fsck échouait. Avec l'arrivée des VFS, cet appel système
a été inutilisable pour cela et la fonction C remove a été introduite pour
ne pas se tromper de commande. L'appel système unlink est restée (mais
bridée) pour un problème de compatibilité.

Pour en revenir à l'errno 89, il ne devrait arriver qu'avec des fonctions
d'entrée/sortie asynchrones. Voir le "man aio_cancel". Alors peut-être que
le programme qui utilise la fonction "remove" fait cet accès de façon
asynchrone en parallèle ?

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Schmurtz
Eric Lévénez wrote:

« Schmurtz » a écrit :

Desole, je n'est jamais utilise cette fonction. Mais essai toujours avec
la fonction unlink (fonction POSIX), qui permet de supprimer un fichier.


Non, la fonction POSIX 1003.1 pour supprimer un fichier est remove, pas
unlink. Il a existé un temps où cet appel système était disponible en tant
que commande unix. C'était une commande très dangereuse car on pouvait par
exemple supprimer un des 2 liens d'un répertoire le rendant inutilisable.
C'était plus une commande servant à corriger le nombre de lien d'un
répertoire quand un fsck échouait. Avec l'arrivée des VFS, cet appel système
a été inutilisable pour cela et la fonction C remove a été introduite pour
ne pas se tromper de commande. L'appel système unlink est restée (mais
bridée) pour un problème de compatibilité.


Va falloir que je revise moi...

--
Schmurtz