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

Linux Discussion :

tester si une machine est 32 ou 64 bits


Sujet :

Linux

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut tester si une machine est 32 ou 64 bits
    Bonjour,
    J'ai le souci suivant : je veux tester si une machine est 32 ou 64 bits, il faut positionner une variable d'environnment avec YES ou NO par exemple. Je sais le faire avec la commande awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uname -r | awk -F "-" '{ print $2 }' | awk -F "." '{ print $3 }' | awk '$0=="x86_64" { print "YES" } $0!="x86_64" { print "NO" }'
    Ce n'est sans doute pas parfait, mais ça marche sur mes machines.
    Cependant, je dois exécuter cette commande dans un makefile (pour compilation de sources C) et bizarrement le awk n'est pas exécuté. Il me faudrait alors avoir une commande similaire sans awk.
    Merci

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Euh... ne serait-il pas plus judicieux de tester plutôt une des 3 options suivantes concernant la commande "uname" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
           -m, --machine
                  afficher le nom de l\'architecture matérielle de la machine
     
           -p, --processor
                  afficher le type du processeur ou « unknown »
     
           -i, --hardware-platform
                  afficher le nom de la plate-forme matérielle ou « unknown »

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    ou encore

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    Bonjour,
    J'ai le souci suivant : je veux tester si une machine est 32 ou 64 bits
    Salut,

    Qu'entends-tu exactement par "machine"?

    Est-ce que tu souhaites savoir si le processeur est 32/64 bits ou bien le kernel?

  5. #5
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par Mygale1978 Voir le message
    Qu'entends-tu exactement par "machine
    C'est une bonne question ! Ce que je sais c'est que le "uname -m" renvoie x86_64, ce qui m'incite à aller chercher des librairies 64 bits.
    Je me suis aperçu que ça modifiait la taille des pointeurs (en C) qui ne tiennent plus dans un int mais dans un long int.

  6. #6
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Euh... ne serait-il pas plus judicieux de tester plutôt une des 3 options suivantes concernant la commande "uname" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
           -m, --machine
                  afficher le nom de l\'architecture matérielle de la machine
     
           -p, --processor
                  afficher le type du processeur ou « unknown »
     
           -i, --hardware-platform
                  afficher le nom de la plate-forme matérielle ou « unknown »
    Oui, ça simplifie ma commande, mais en final je voudrais une valeur YES ou NO dans une variable d'environnement (sans utiliser awk) : le awk permettait de faire le test sur ce que renvoie uname.
    Merci

  7. #7
    Membre confirmé
    Avatar de heinquoi
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 85
    Points : 491
    Points
    491
    Par défaut
    bonjour,

    ce fichier Makefile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ARCHTYPE := $(shell uname -p)
    ALL:
        @echo "achitecture du systeme:"$(ARCHTYPE)
    me renvoi apres un make:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    achitecture du systeme:x86_64
    Cela va fonctionner uniquement sur les os qui ont la commande "uname -p"

    Cela dit, pour ma part je passe par cmake qui détecte simplement l'architecture sur de nombreux os

    sinon dans le code C
    sizeof ( poiteur*)

    Question indiscrète: C'est pour quoi faire le programme ? Parce qu'habituellement le compilateur se débrouille très bien tout seul avec la taille des pointeurs et des int ( a moins de hacker comme un sauvage pour faire une rampe de lancement pour sa cafetière et de taper directement dans les adresses mémoires )

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Points : 21
    Points
    21
    Par défaut
    Il est un peu tard pour répondre mais j'ajoute qu'on peut utiliser la commande getconf (getconf -a). Il est possible de spécifier la propriété à récupérer, par exemple:

    Ce qui renvoie 64 chez moi.

    Fonctionne aussi dans un makefile (attention, si je dis pas de bêtises il faut placer ça tout en haut du makefile, en premier, sinon ça marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LBITS := $(shell getconf LONG_BIT)
    ifeq ($(LBITS),64)
       # 64 bits stuff
    else
       # 32 bits stuff
    endif
    Comme dit plus haut, je préfère ne pas me rappeler pourquoi j'ai eu besoin de ça ... Je sais juste que parfois on a pas vraiment le choix, et c'est bien utile.

  9. #9
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    C'est parfait, exactement ce dont j'ai besoin.
    Pour info, mon appli doit fonctionner sous 32 ou 64 bits, j'avais donc besoin dans mes makefile de faire un aiguillage car certains chemins pour accèder aux libraries sont différents.
    merci
    Citation Envoyé par heinquoi Voir le message
    bonjour,

    ce fichier Makefile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ARCHTYPE := $(shell uname -p)
    ALL:
        @echo "achitecture du systeme:"$(ARCHTYPE)
    me renvoi apres un make:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    achitecture du systeme:x86_64
    Cela va fonctionner uniquement sur les os qui ont la commande "uname -p"

    Cela dit, pour ma part je passe par cmake qui détecte simplement l'architecture sur de nombreux os

    sinon dans le code C
    sizeof ( poiteur*)

    Question indiscrète: C'est pour quoi faire le programme ? Parce qu'habituellement le compilateur se débrouille très bien tout seul avec la taille des pointeurs et des int ( a moins de hacker comme un sauvage pour faire une rampe de lancement pour sa cafetière et de taper directement dans les adresses mémoires )

  10. #10
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Oui, très bien ce getconf. Je prends aussi.
    Merci

    Citation Envoyé par razlock Voir le message
    Il est un peu tard pour répondre mais j'ajoute qu'on peut utiliser la commande getconf (getconf -a). Il est possible de spécifier la propriété à récupérer, par exemple:

    Ce qui renvoie 64 chez moi.

    Fonctionne aussi dans un makefile (attention, si je dis pas de bêtises il faut placer ça tout en haut du makefile, en premier, sinon ça marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LBITS := $(shell getconf LONG_BIT)
    ifeq ($(LBITS),64)
       # 64 bits stuff
    else
       # 32 bits stuff
    endif
    Comme dit plus haut, je préfère ne pas me rappeler pourquoi j'ai eu besoin de ça ... Je sais juste que parfois on a pas vraiment le choix, et c'est bien utile.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/09/2010, 15h28
  2. [langage] Comment tester si une chaine est vide
    Par |Bio dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 16h05
  3. Tester si une table est vide
    Par rsc dans le forum SQL
    Réponses: 2
    Dernier message: 01/07/2004, 17h25
  4. [JDBC]tester si une table est vide
    Par zozolh2 dans le forum JDBC
    Réponses: 5
    Dernier message: 28/05/2004, 10h17
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 12h54

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