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

C++ Discussion :

trouver mon OS


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut trouver mon OS
    salut tous,

    j'ai regardé pas mal de trucs sur le net et je n'ai pas trouvé une solution unique pour détecter sur quel OS je suis. es ce si complexe que cela ?

    j'aimerai que mon programme puisse détecter si je suis sous unix ou windows car j'aimerai générer des dossiers (donc avec une commande qui dépend de l'OS).

    je veux un code qui n'utilise pas de bibliothèques externe donc je laisse tomber toutes les solutions que j'ai pu trouver avec BOOST.

    1°) Pour le moment, les deux meilleurs bout de code que j'ai trouvé sont ceux ci dessous. Qu'en pensez vous ? sont il vraiment portable et indépendant du compilateur par exemple ?
    Si j'ai un windows ou linux ou max 64bits il ne va pas y avoir de soucis ?


    j'ai vu sur le net des codes très proche de ceci mais avec des underscore devant les win, ou linux, unix...Etc
    => du coup faut il mettre des _ ou non ? il y a t il une différence ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #if defined(WIN32) && !defined(UNIX)
    /* Do windows stuff */
    #elif defined(UNIX) && !defined(WIN32)
    /* Do linux stuff */
    #else
    /* Error, both can't be defined or undefined same time */
    #endif
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if defined __APPLE__ || defined linux
    # include <unistd.h>
    #elif defined ( WIN32 ) || defined ( WIN64 )
    # include <windows.h>
    #endif
    2°) ma deuxième partie de question est sur l'écriture de fichiers dans des dossiers.

    une fois que j'ai détecté mon OS comment lui dire d'écrire mon fichier "test.txt" dans le dossier "myFolder" ?

    ça doit être un truc dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if (windows) {
    string PATH=system("dir myFolder");
    string pathPlusName=PATH+"test.txt";
    ofstream file(pathPlusName, ios::trunc);
    file << "blabla" << endl;
    file.close();
    } else {
    string PATH=system("mkdir myFolder");
    string pathPlusName=PATH+"test.txt";
    ofstream file(pathPlusName, ios::trunc);
    file << "blabla" << endl;
    file.close();
    }
    pourriez vous m'aidez svp car je galère trop avec ça

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    1) Les constantes sont dépendantes du compilateur. Il faut donc en gérer le maximum (heureusement il en existe pas des centaines ).
    2) non, c'est en utilisant des #if defined

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Citation Envoyé par transgohan Voir le message
    1) Les constantes sont dépendantes du compilateur. Il faut donc en gérer le maximum (heureusement il en existe pas des centaines ).
    2) non, c'est en utilisant des #if defined
    merci pour ta réponse.

    par contre pour le 1°) j'ai encore une interrogation :
    => où trouver la liste de toutes ces constantes dépendantes du compilateur ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    La bonne réponse est d'éviter system(), et de ne pas utiliser de chemin absolu en dur.

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Salut une possibilité sous Windows c'est d'appeler
    GetVersionEx
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    Si la fonction échoue alors l'OS n'est pas Windows, voir le MSDN si c'est bien ça

    Pour les constantes spécifiques à l'OS pour Windows ça se trouvera dans le MSDN

    Sinon comme le précise leternel, éviter d'appeler la fonction system()

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Salut une possibilité sous Windows c'est d'appeler
    GetVersionEx
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    Si la fonction échoue alors l'OS n'est pas Windows, voir le MSDN si c'est bien ça

    Pour les constantes spécifiques à l'OS pour Windows ça se trouvera dans le MSDN

    Sinon comme le précise leternel, éviter d'appeler la fonction system()
    Cela ne règle pas le problème, sous linux le programme ne compilera pas car windows.h n'existe pas.

    Quant à la liste des constantes je viens de retrouver mon lien favori : http://sourceforge.net/p/predef/wiki/OperatingSystems/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aidez moi à trouver mon école
    Par casabest dans le forum Etudes
    Réponses: 2
    Dernier message: 30/11/2008, 20h38
  2. Trouver mon Mac
    Par lastrecrue dans le forum Réseau
    Réponses: 0
    Dernier message: 18/06/2008, 08h27
  3. Réponses: 1
    Dernier message: 28/02/2008, 10h13
  4. [Configuration] Où trouver mon php.ini
    Par ofaul dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 31/10/2007, 17h17
  5. comment vous trouver mon site www.dari-dz.com
    Par dari-dz dans le forum Mon site
    Réponses: 1
    Dernier message: 16/04/2007, 17h43

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