FILE_SHARE_READ sous linux ?

cs_supergrey
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010
- 6 mai 2008 à 17:50
cs_supergrey
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010
- 7 mai 2008 à 19:06
Bonjour, j'essaye d'ouvrir un fichier en écriture et lecture mais si je
l'ouvre une seconde fois (sans le fermer biensur) ça ne fonctionne pas.

Sous windows il y a FILE_SHARE_READ mais sous linux je ne sais pas.

Voila la fonction que j'utilise pour ouvrir: open(file,O_RDWR|O_CREAT)


J'ai bien essayé de cherché sur google mais c'est bien plus facile de
trouver de l'aide pour Windows, donc si quelqu'un pouvait m'aider.

Merci

4 réponses

SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
7 mai 2008 à 02:26
Ça fonctionne pour moi si je donne à l'utilisateur les droits nécessaires sur le fichier:

int main (int argc, char *argv[])
{
    const char filepath[] = "/tmp/toto.txt";
    int fd1 = open(filepath, O_RDWR|O_CREAT, S_IRUSR );

    if(fd1 ! = -1) {
        int fd2;

        write(fd1, "Bonjour", 7);
   
        if((fd2 = open(filepath, O_RDONLY)) != -1) {
            char buf[12];

            buf[read(fd2, buf, 7)] = 0;
       
            printf("%s\n", buf);
           
            close(fd2);
        }
        else printf("Impossible de reouvrir le fichier\n");
   
        close(fd1);

        remove(filepath);
    }
    else printf("Impossible d'ouvrir le fichier\n");

    return 0;
}

C++ (@++)
0
cs_supergrey
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

7 mai 2008 à 09:14
Si je fais ça, le second renvoi une erreur d'acces:
int ftest=open("fichier",O_RDWR|OCREAT, S_IRWXO);
int ftest2=open("fichier",O_RDWR|OCREAT);

PS. normalement les ouverture sont dans des thread différents d'ou l'utilité, mais la c'est pour tester...
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
7 mai 2008 à 16:24
As-tu essayé avec S_IRWXU ?
Aussi, lors de la seconde ouverture, le flag O_CREAT est, normalement, inutile.
C++ (@++)
0
cs_supergrey
Messages postés
475
Date d'inscription
vendredi 27 juin 2003
Statut
Membre
Dernière intervention
20 septembre 2010

7 mai 2008 à 19:06
Oui ça marche, j'avais trouvé ça sur un site, j'avais du mal copié... merci.

supergrey
0