deux descripteurs de fichiers pour un même fichier
À l'aide de la posix read() write() linux appels, est-il garanti que si j'écris par un descripteur de fichier et de lire un autre descripteur de fichier, dans une série de la mode tels que les deux actions sont mutuellement exclusifs les uns des autres... ce ma lire le fichier descripteur de toujours voir ce qui a été écrit en dernier lieu par l'écriture descripteur de fichier?
je crois que c'est le cas, mais je veux être sûr et la page de man n'est pas très utile sur ce
OriginalL'auteur Michael Xu | 2011-03-12
Vous devez vous connecter pour publier un commentaire.
Il dépend de l'endroit où vous avez obtenu les deux descripteurs de fichier. Si elles viennent d'une dup(2) l'appel, ils partagent l'offset du fichier et l'état, afin de faire un write(2), sur un va influer sur la position de l'autre. Si, d'autre part, ils viennent de deux open(2) les appels, chacun aura son propre fichier de décalage et de l'état.
Un descripteur de fichier est principalement une référence à un fichier du noyau de la structure, et il est le noyau de la structure qui contient la plupart de l'état. Lorsque vous ouvrez(2) un fichier, vous obtenez un nouveau fichier noyau de la structure et un nouveau descripteur de fichier se réfère à elle. Lorsque vous dup(2) un descripteur de fichier (ou de passer un descripteur de fichier à travers sendmsg), vous obtenez une nouvelle référence pour le même noyau de fichier struct.
Avec deux appels ouverts, chaque fd aura sa propre position. Donc, si les deux sont au début du fichier, et que vous écrivez avec l'un, l'autre sera toujours au début du fichier, donc une écriture, il va écraser ce que le premier à écrire écrit, sauf si vous avez ouvert le fichier avec O_APPEND (dans ce cas, chaque écriture implicitement cherche à la fin avant d'écrire).
merci à chris. ma question était un peu différent, mais oui... si la deuxième était la lecture, il serait de lire exactement ce que le premier écrit. le répondre à ma question, c'est que oui, c'est garanti que toute personne de la lecture du fichier après que l'écriture n'a retournée lire ce que l'écriture a écrit. c'est parce que linux verrouille l'accès io cache des pages en mémoire
donc, peut-on avoir deux descripteurs de fichiers qui pointent sur le même fichier, mais qui ont une valeur différente?
OriginalL'auteur Chris Dodd
C'est garanti que si les deux se réfèrent à la même description du fichier, en l'occurence, vous avez de "dup" ou "dup2" (ou hérité par
fork()
).OriginalL'auteur Erik
lorsque vous utilisez
dup()
oudup2()
oufork()
,le fichier de table est partagée par les deux descripteurs de fichier.
donc, si vous
write
quelque chose à partir d'un descripteur de fichier , et de nouveauwrite
quelque chose par le biais d'autres descripteur de fichier , alors il est ajouté ne sont pas écrasés.mais si deux processus indépendant d'ouvrir un seul fichier , les données écrites par les deux processus peuvent se mêler.
OriginalL'auteur user2742399