PDA

Visualizza la versione completa : [C] Determinare a runtime il sistema operativo


claudio82
23-02-2007, 18:40
Ciao a tutti, come da oggetto vorrei sapere se è possibile e quali istruzioni servono per determinare in fase di esecuzione su quale sistema operativo ci troviamo, grazie mille!

Xaratroom
23-02-2007, 19:54
:dottò:
E' assolutamente impossibile fare una cosa del genere in c: il c è un linguaggio compilato, quindi, ogni programma deve essere ricompilato per l's.o. specifico (es linux e windows)...
Se intendi su che windows ci troviamo allora prova in questo modo:


OSVERSIONINFO winosinfo;
winosinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
memset(winosinfo.szCSDVersion,'\0',128);
GetVersionExA(&winosinfo);

switch(winosinfo.dwMajorVersion)
{
case 4:
switch(winosinfo.dwMinorVersion)
{
case 0:
// Windows 95
break;
case 10:
// Windows 98
break;
case 90:
// Windows ME
break;
}
break;
case 5:
switch(winosinfo.dwMinorVersion)
{
case 0:
// Windows 2000
break;
case 1:
// Windows XP
break;
case 2:
// Windows 2003 Server
break;
}
break;
case 6:
if (!winosinfo.dwMinorVersion)
// Windows Vista
}

claudio82
24-02-2007, 12:38
Grazie mille, in effetti mi riferivo proprio alla possibilita di verificare non la versione dello stesso sitema ma invece se si tratta ad esempio di un sistema linux o microsoft... piu che altro per utilizzare quelle che sono le direttive di sistema corrette in un programma, banalmente ad esempio per pulire lo schermo vorrei poter richiamare la system("cls") se il porgramma viene eseguito su windows o la system("clear") su linux.... quindi forse l'unico modo e quello di utilizzare una try-catch per ottenere lo stesso risultato su sistemi diversi senza dover modificare il codice e ricompilare tutto...o sbaglio?

MItaly
24-02-2007, 12:52
Spesso i compilatori definiscono macro differenti a seconda del sistema operativo su cui stanno compilando... ad esempio, VC++ definisce la macro _WIN32. In tal caso potresti usare una cosa del genere:


#if defined _WIN32
//fa quello che deve fare se compilato su Windows
#elif defined _LINUX //dico per dire
//fa quello che deve fare se compilato su Linux
#endif

.

Loading