IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Portage appli Linux sous windows : open


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Portage appli Linux sous windows : open
    Bonjour
    je suis en train de porter une petite appli C++ de linux sous windows 7 (je souhaiterais la faire compatible pour les 2)

    Que mon fichier fasse 1 giga ou 500 j'ai un problème sur la fonction open en écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <unistd.h>
    #include <time.h>
    #include <string>
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <set>
     
    #define O_LARGEFILE	0   
    ......
     
        fd = open(filename.c_str(), O_RDONLY|O_LARGEFILE);
    .....
        fd = open(filename.c_str(), O_RDWR|O_LARGEFILE);
        if (fd < 0) {
            ostringstream oss;
            oss << "! Unable to open the input file: " << filename << " for writing";
     
    .....
    la ligne avec O_RDONLY|O_LARGEFILE fonctionne parfaitement

    mais pas celle avec O_RDWR|O_LARGEFILE et j'obtiens bien sûr le message codé "Unable to open the input file:..."

    Je précise que c'est moi qui est ajouté la ligne
    #define O_LARGEFILE 0
    parce que je n'ai pas trouvé où cette constante pouvait être définie ailleurs.
    Est-ce qu'elle peut être la cause du problème?

    Si quelqu'un a une idée...

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    C'est une impression où tu ne fermes pas le fichier avant de le réouvrir ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Je ne connais pas la réelle valeur de ce flag, mais s'il vaut 0, c'est inutile de le rajouter.

    Un OR 0 ne fait strictement rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a = 42;
    a |= 0;
    assert(a == 42);

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Bonjour
    le fichier est bien fermé. mes 2 lignes sont dans 2 fonctions différentes et juste avant la ligne RDWR, il y a un close(fd).
    Mais je vais creuser aussi de ce coté : peut-etre qu'en effet la fermeture ne se fait pas bien.
    Je suis d'accord avec toi pour le OR 0. J'ai mis cette valeur pour pouvoir compiler le programme.
    A+

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Si open() échoue, errno contient un code d'erreur qui te permettra de diagnostiquer le problème.
    Si mémoire est bonne, tu peux aussi utiliser strerror() ou perror() pour avoir un texte de diagnostic.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    j'ai testé le retour du close et il est bon. Si je mets un readOnly à la place du RDWR l'open se fait.
    Dans propriété du fichier, onglet sécurité, "Tout le monde" a bien tous les droits.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    invalid argument avec O_RDWR
    un problème de librairy??

  8. #8
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    Est-ce qu'il y a quelque chose que tu ne nous a pas dit sur ce fichier ? genre par exemple, sur quel système de fichiers et quel type de disque est-il stocké ?
    Se trouverait-il sur une compact flash par hasard ? Ou sur le réseau ?

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je doute que ça vienne de là, mais « open » est indiquée comme « deprecated » --> peux-tu faire le test avec _open(filename.c_str(), _O_RDWR|_O_LARGEFILE, _S_IREAD | _S_IWRITE) ?

    Peut-être auras-tu une meilleure erreur pour diagnostiquer le soucis.

Discussions similaires

  1. Réponses: 15
    Dernier message: 01/05/2007, 00h54
  2. importer les include linux sous windows ?
    Par cscheater dans le forum Windows
    Réponses: 3
    Dernier message: 11/01/2006, 20h44
  3. (Bash) Emuler les Bash de Linux sous Windows
    Par Furius dans le forum Windows
    Réponses: 16
    Dernier message: 26/10/2005, 20h28
  4. Portage d'une librairie linux sous windows
    Par sleg dans le forum C++
    Réponses: 22
    Dernier message: 31/05/2005, 22h21
  5. Accés a un disque dur LINUX sous WINDOWS
    Par [_Key_Zee__] dans le forum Administration système
    Réponses: 9
    Dernier message: 18/04/2004, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo