open () que se passe-t-il si j’ouvre deux fois le même fichier?

Si j’ouvre deux fois le même fichier, est-ce que cela va générer une erreur ou créer deux descripteurs de fichier différents? Par exemple

a = open("teste.txt", O_RDONLY); b = open("teste.txt", O_RDONLY); 

Dans ce cas, puisque vous ouvrez les deux fichiers en lecture seule, vous obtiendrez deux descripteurs de fichier différents qui font référence au même fichier. Voir la page de manuel pour plus de détails.

Pour compléter ce que @Drew McGowen a dit,

En fait, dans ce cas, lorsque vous appelez open () deux fois sur le même fichier, vous obtenez deux descripteurs de fichier différents pointant vers le même fichier (même fichier physique). MAIS , les deux descripteurs de fichier sont indépendants en ce sens qu’ils pointent vers deux descriptions de fichier ouvertes différentes (une description de fichier ouvert est une entrée de la table des fichiers ouverts à l’échelle du système).

Ainsi, les opérations de lecture effectuées ultérieurement sur les deux descripteurs de fichier sont indépendantes, vous appelez read () pour lire un octet depuis le premier descripteur, puis vous appelez à nouveau read () sur le deuxième descripteur de fichier, car leurs décalages ne sont pas partagés; même chose.

 #include  int main() { // have kernel open two connection to file alphabet.txt which contains letters from a to z int fd1 = open("alphabet.txt",O_RDONLY); int fd2 = open("alphabet.txt",O_RDONLY); // read a char & write it to stdout alternately from connections fs1 & fd2 while(1) { char c; if (read(fd1,&c,1) != 1) break; write(1,&c,1); if (read(fd2,&c,1) != 1) break; write(1,&c,1); } return 0; } 

Cela produira aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz

Voir ici pour plus de détails, en particulier les exemples de programmes à la fin.