Determiner si windows 32/64 bits en C (ou existence repertoire)
Résolu
aiglenoirdu29
Messages postés
10205
Date d'inscription
Statut
Contributeur
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Determiner si windows 32/64 bits en C (ou existence repertoire)
- Winrar 64 bits windows 10 - Télécharger - Compression & Décompression
- 32 bits - Guide
- Clé windows 10 pro 64 bits gratuit - Guide
- Télécharger windows 7 32 bits usb - Télécharger - Systèmes d'exploitation
- Power iso 32 bit - Télécharger - Gravure
4 réponses
Bonjour,
Cela dépend de ton compilateur, mais tu peux utiliser :
Note : ce n'est pas terrible system()... Utilise plutôt execve().
Cdlt,
Cela dépend de ton compilateur, mais tu peux utiliser :
#if defined(_WIN32) ... #elif defined(_WIN64) ... #endif
Note : ce n'est pas terrible system()... Utilise plutôt execve().
Cdlt,
Du batch serait beaucoup plus approprié, tu as une command IF EXIST ( instruction), c'est magnifique pour ce genre de choses.
Bonjour YCN-,
j'avais effectivement utilisé IF EXIST pour la première version qui était en batch.
Mais programme complet utilise des structures de données non disponibles en batch (pile d'exécution, gestion de fichiers de données et rapports...).
Sans compter qu'en batch ça commençait vraiment a ne plus ressembler à rien dès qu'on dépasse les 100 lignes de code donc je me suis retourné vers le C que je connais un peu et où je peux sans soucis faire des tas de fonctions et d'appels en séparant tout ça proprement et surtout lisiblement.
j'avais effectivement utilisé IF EXIST pour la première version qui était en batch.
Mais programme complet utilise des structures de données non disponibles en batch (pile d'exécution, gestion de fichiers de données et rapports...).
Sans compter qu'en batch ça commençait vraiment a ne plus ressembler à rien dès qu'on dépasse les 100 lignes de code donc je me suis retourné vers le C que je connais un peu et où je peux sans soucis faire des tas de fonctions et d'appels en séparant tout ça proprement et surtout lisiblement.
J'ai peut être une solution, tu peux peut être appeler un simple batch et lui demander de te retourner un booléen en fonction de si oui ou non le fichier existe. Cependant je ne suis pas un expert en batch alors je ne saurais pas trop comment récupérer le booléen en sortie du batch puis l'utiliser dans ton code C, en revanche je suis convaincu que ça doit être possible. Si c'est la solution que tu te décide à employer, je veux bien savoir comment tu auras fait pour "attraper" le bool en sortie de batch !
Cordialement,
Cordialement,
Hm certainement, c'est claire que c'était hyper bricolé ! Mais j'aurais bien aimer cependant savoir comment faire cette interface batch/C, afin de pouvoir récupérer les sorties d'un batch dans mon programme en C. Cad les utiliser tout comme des fonction qui retourne des int/float/char... J'aimerais beaucoup savoir faire ça, ça me permettrait d'organiser un peu mieux mes batch en les appelant d'un programme en C.
Arf wProcessorArchitecture ça ne résout pas mon soucis, si le processeur est en 64 bits mais que l'os installé est en 32 bits alors il me dira comme réponse 64bits... alors que la vrai réponse est 32.
Du coup j'ai fais avec opendir et ça marche très bien, code ajouté dans mon programme :
Merci encore à tous !
Source : Stackoverflow.com
Du coup j'ai fais avec opendir et ça marche très bien, code ajouté dans mon programme :
#include <dirent.h>
[...]
struct dirent *pDirent;
DIR *pDir;
pDir = opendir ("C:/Program Files (x86)/");
if (pDir == NULL) {return 32;} else {return 64;}
[...]
Merci encore à tous !
Source : Stackoverflow.com
Bonsoir
Je ne pense pas que le fait de tester l'existence d'un répertoire sur un système donné puisse définir l'environnement de plus, ce teste ne fait qu'affirmer la séparation des exécutables de types 32 et 64.
Là où je pense qu'il faudrait jouer de manière astucieuse est sur les informations d'environnement sur lequel l'exécutable tourne (et le père a raison) de ce fait on peut exécuter certaines instructions pour l'environnement sur lequel l'exécutable s'exécute et aussi mettre de côté le bash.
à bientôt
Je ne pense pas que le fait de tester l'existence d'un répertoire sur un système donné puisse définir l'environnement de plus, ce teste ne fait qu'affirmer la séparation des exécutables de types 32 et 64.
Là où je pense qu'il faudrait jouer de manière astucieuse est sur les informations d'environnement sur lequel l'exécutable tourne (et le père a raison) de ce fait on peut exécuter certaines instructions pour l'environnement sur lequel l'exécutable s'exécute et aussi mettre de côté le bash.
/* Windows */ #if _WIN64 #define CPU_ARCHI 64 #include <stdint.h> #else #define CPU_ARCHI 32 #include <stdint.h> #endif /* Linux */ #if __LP64 || _LP64 #define CPU_ARCHI 64 #include <stdint.h> #else #define CPU_ARCHI 32 #include <stdint.h> #endif /* Contrôle max entier */ #if INTPTR_MAX == INT64_MAX #define INT_ARCHI 64 #elif INTPTR_MAX == INT32_MAX #define INT_ARCHI 32 #else #define INT_ARCHI 0 #endif /* Autre constante de teste */ #define _CHECK_OS_ARCHI_ fprintf( stdout, "OS\t:%d\n",CPU_ARCHI ); #define _CHECK_INT_OS_ARCH_ fprintf( stdout,"INT OS\t:%d\n", INT_ARCHI ); #define _VALUE_INT (INTPTR_MAX == INT64_MAX) ? INT64_MAX\ : (INTPTR_MAX == INT32_MAX) ? INT32_MAX : INTPTR_MAX #define _GET_ARCHI_INFO_INT fprintf( stdout,"INT\t:%ld\n", _VALUE_INT ); #include <stdio.h> /* Autre exemple utilisation func*/ int f_is_32_or_64( void ){ return ( INT_ARCHI == CPU_ARCHI) ? CPU_ARCHI : INT_ARCHI; } int main( void ){ _CHECK_OS_ARCHI_; _CHECK_INT_OS_ARCH_; _GET_ARCHI_INFO_INT; if( CPU_ARCHI != f_is_32_or_64() ) printf("Erreur environement"); else printf("OS%d\n", CPU_ARCHI ); return 0; }
à bientôt
Ça ne va pas le renseigner sur la machine sur laquelle a tourné le compilateur, plutôt que sur celle sur laquelle tourne l'exécutable ?
A voir ce qu'il souhaite.
S'il souhaite le déterminer dynamiquement, il suffit d'utiliser l'API Win32 GetSystemInfo qui renvoie une structure SYSTEM_INFO. Le champ wProcessorArchitecture contiendra l'information recherchée.
Cdlt,
Je vais de ce pas voir pour GetSystemInfo !
Je regarderais également execve que je ne connais pas, j'utilise system par habitude.