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 :

Connaitre l'OS


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut Connaitre l'OS
    Hello,
    j'aimerais savoir si il est possible dans un programme C de savoir sous quel système d'exploitation le programme est lancé? (entre autre j'aimerais faire la différence entre windows et linux...)

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Ton programme va être compilé pour une cible. Même si tu fais du code le plus portable possible (ce qui est plus que recommandé), le binaire produit sera forcément différent.

    Donc si tu compiles pour un OS "A", le test va être simple :
    Si tu es sur une machine avec l'OS "A", ton programme va s'exécuter
    Si tu es sur un autre OS non compatible avec l'OS "A", alors ton programme ne va pas s'exécuter.

    C'est un bon moyen de différencier un OS....
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Oui c'est sur... mais j'aimerai pouvoir différencier les OS dans le programme même, afin par exemple d'appeler une fonction différente selon l'OS...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    si(OS == WIN) 
       alors fonction1()
    sinon fonction2()

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    de façon standard ce n'est pas facile
    Sous Windows il existe une variable d'environnement nommée OS, sous Linux, tu peux essayer de récupérer le résultat de la commande uname.

    La glib fournie des macro pour cela : Standard Macros, si tu as le courrage de regarder les sources (très claires), cela pourra peut être t'aider

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Connaitre l'OS
    Citation Envoyé par vinzzzz
    Hello,
    j'aimerais savoir si il est possible dans un programme C de savoir sous quel système d'exploitation le programme est lancé? (entre autre j'aimerais faire la différence entre windows et linux...)
    Le problème n'est pas de savoir sur quel OS il est lancé (il est trop tard pour se poser la question), mais pour quel OS on va générer le code.

    C'est là qu'intervient la compilation conditionelle. Comme la façon d'identifier les cibles n'est pas standard, je recommande une dénomination 'indépendante' du type

    ou
    ou
    etc.
    à mettre sur la ligne de commande avec dans le code un
    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
    25
    26
    27
    28
    29
    30
    31
     
    #ifndef H_OS
    #define H_OS
    /* os.h */
     
    /* on a que 16 bits de facon portable...
     
       1111  11         
       5432  1098      7654    3210
       OS    Version   Cible   Reserve
     
     
    */
    #define OS_OS_LINUX        0x1000
    #define OS_OS_WINDOWS      0x2000
     
    #define OS_LINUX_VER_2_4   0x0100
    #define OS_LINUX_VER_2_6   0x0200
     
    #define OS_WINDOWS_VER_3x  0x0100
    #define OS_WINDOWS_VER_9x  0x0200
    #define OS_WINDOWS_VER_XP  0x0300
     
    #define OS_CIBLE_X86       0x0010
    #define OS_CIBLE_PPC       0x0020
    #define OS_CIBLE_SPARC     0x0030
     
    #define OS_LINUX_2_4_X86 (OS_OS_LINUX | OS_LINUX_VER_2_4 | OS_CIBLE_X86)
    /* etc. */
     
    #endif /* guard */
    et dans l'implémentation, on différencie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #if (OS == OS_LINUX_2_4_X86)
    /* code specifique... */
    #endif

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    je vais voir ca merci
    Par contre la glib c'est du C standart? ou il faut que je l'ajoute?

    je suis quand même décu je pensais que ca existait de façon standart, ca peut quand même être utile...

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vinzzzz
    je vais voir ca merci
    Par contre la glib c'est du C standart? ou il faut que je l'ajoute?
    g = GNU : c'est pas standard (mais très portable. En gros partout où il y a gcc...)
    je suis quand même décu je pensais que ca existait de façon standart, ca peut quand même être utile...
    C'est pas possible. Quand on conçoit un langage portable (donc indépendant de la plateforme), par-définition, on ne sait pas sur quelles plateformes il va tourner...

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    En fait j'avais mal formulé ma questions, je m'en suis rendu compte avec le post d'Emmanuel.
    Ce que je voulais faire ressemble a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    #if (OS == OS_LINUX)
    #define MACRO fonction_linux(...)...
    #else
    #define MACRO fonction_win(...)...
    Ce n'est donc pas pendant le programme mais avant, pour justement définir les macro selon l'OS...
    Et mon pb était de savoir si il existait déjà une macro permettant de déterminer l'OS, de manière standart...

    Par contre je n'ai pas bien compris ta méthode Emmanuel... (je suis toujours étudiant, donc relativement ignorant et dépourvu d'expérience )


    C'est pas possible. Quand on conçoit un langage portable (donc indépendant de la plateforme), par-définition, on ne sait pas sur quelles plateformes il va tourner...
    Oui ca parait logique autant pour moi...[/code]

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vinzzzz
    Ce que je voulais faire ressemble a ceci:
    Ok, on va simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #if defined (OS_LINUX)
    #define MACRO fonction_linux(...)...
    #elif defined (OS_WINDOWS)
    #define MACRO fonction_win(...)...
    #else
    #error not defined for this platform
    #endif
    Quand tu compiles pour Windows, tu définies OS_WINDOWS globalement avec -D ou une config de l'IDE et quand c'est pour Linux, OS_LINUX

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    ok!! c'est ce qu'il me faut merci bien

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/03/2006, 12h36
  2. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 10h05
  3. Connaitre le temps d'execution d'un pgm ?
    Par yacinechaouche dans le forum C
    Réponses: 7
    Dernier message: 27/01/2003, 20h57
  4. Connaitre l'unitée à ajouter dans USES
    Par DelphiCool dans le forum Langage
    Réponses: 7
    Dernier message: 01/08/2002, 13h48
  5. Connaitre le nom des imprimantes
    Par bastien dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/06/2002, 16h36

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