8.14 posixfile --- Objets équivalents aux fichiers, avec support pour le verrouillage

Disponibilité: Unix

POSIX

Note: Ce module peut devenir obsolète dans une version future. Les services fournis par le module sont mieux faits et plus portables grace à la fonction fcntl.lockf().

Ce module fournit des fonctions supplémentaires sur les objets de type fichier (intégrés dans l'interpréteur). En particulier, il fournit des services de verrouillage, de gestion des modes de fichiers, et une interface facile à utiliser pour dupliquer des objets fichiers. Ce module définit un nouveau type d'objet, le type posixfile. Ce type propose toutes les méthodes standard du type fichier, plus des méthodes décrites ci-après. Ce module ne marche que sur certains types de plateformes Unix, car il utilise fcntl.fcntl() pour le verrouillage.

Pour obtenir une isntance d'objet posixfile, il faut utiliser la fonction open() du module posixfile. L'objet obtenu est en gros équivalent à un objet fichier standard.

Le module posixfile définit les constantes suivantes.

SEEK_SET
Le décalage est calculé depuis le début du fichier.

SEEK_CUR
Le décalage est calculé depuis la position courante du curseur de fichier.

SEEK_END
Le décalage est calculé depuis la fin du fichier.

Le module posixfile définit les fonctions suivantes:

open(nomdefichier[,mode[,taille buffer]])
Création d'un nouvel objet posixfile avec le nom de fichier et le mode passés en argument. Les arguments sont interprétés de la même façon que dans la fonction open() (voir manuel Unix).

fileopen(objetfichier)
Création d'un nouvel objet posixfile avec l'objet fichier passé en argument. L'objet résultat a le même nom de fichier et mode que l'original.

L'objet posixfile définit les méthodes supplémentaires suivantes:

lock(fmt, [taille[,début[,whence]]])
Verrouille la section du fichier signalée par l'objet fichier. Le format est décrit ci-après. L'argument taille donne la taille de la section qui doit être verrouillée. Par défaut, la valeur de la taille est 0. début donne le décalage de début de section, par défaut 0. L'argument whence indique à partir de quoi le décalage est relatif. Il prend pour valeur une des constantes SEEK_SET, SEEK_CUR or SEEK_END. Pour plus d'informations, se reporter à fcntl(2) dans les manuels Unix.

flags([indicateurs])
Active les indicateurs spécifiés pour le fichier auquel l'objet se réfère. Un OU logique est réalisé avec les anciens indicateurs, sauf si spécifié autrement. Le format des indicateurs est détaillé ci-après. Sans l'argument flags, une chaîne contenant les indicateurs actuels est retournée (voir aussi le modificateur "?" pour obtenir ces indicateurs). Pour plus d'information, voir aussi fcntl(2) dans la pages Unix.

dup()
Duplique l'objet fichier ainsi que le pointeur de fichier interne associé et le descripteur de fichier. Le nouvel objet se comporte comme si le fichier venait d'être ouvert.

dup2(fd)
Duplique l'objet fichier ainsi que le pointeur de fichier interne associé et le descripteur de fichier. Le nouvel objet aura le descritpeur de fichier en question. Sinon, le nouvel objet se comporte comme si le fichier venait d'être ouvert.

file()
Renvoie un objet fichier standard basé sur l'objet posixfile. C'est parfois nécessaire pour certaines fonctions qui imposent un objet de type fichier standard.

Toutes les méthodes lèvent l'exception IOError quand la demande échoue.

Les caractères pour le format de lock() ont la signification suivante:

Format Signification 
udéverrouille la région spécifiée
rdemande un verrou en lecture pour la section en question
wdemande un verrou en écriture pour la section en question

De plus, les modificateur suivants peuvent être ajoutés au format:

Modificateur Signification Note 
|attendre jusqu'à ce que le verrou soit accordé 
?Renvoie le premier verrou en concurrence, ou bien None s'il n'y a pas de conflit.(1)

Note:

(1)
Le verrou renvoyé est du format (mode, taille, début, whence, pid) avec mode un caractère représentant le type de verrou ('r' ou 'w'). Ce modificateur empèche qu'une requête soit accordée.

Les caractères utilisés pour la définition du format pour flags()sont les suivants:

Format Signification 
aAjout de l'indicateur
cIndicateur de fermeture à l'exécution
nIndicateur de NON attente (no delay) (ou encore indicateur de NON blocage (non-blocking)
sIndicateur de synchronisation

Les modificateurs suivant peuvent également être ajoutés:

Modificateur Signification Note 
!désactive les indicateurs spécifiés, qui sont par défaut actifs(1)
=remplace l'indicateur au lieu de faire un OU logique(1)
?Renvoie une chaîne de caractères dans laquelle les caractères représentent les indicateurs qui sont actifs.(2)

Notes:

(1)
Les modificateurs "!" et "=" sont mutuellement exclusifs.

(2)
Cette chaîne représente les indicateurs après qu'ils aient été modifiés par ce même appel.

Exemples:

import posixfile

file = posixfile.open('/tmp/test', 'w')
file.lock('w|')
...
file.lock('u')
file.close()