Dovrei scrivere una funzione per ottenere alcune informazioni sul sistema (l'informazione più importante è l'architettura). Ho trovato la funzione uname che può essere utilizzata incluso sys/utsname.h. Beh, anche se ho cercato su Google e ho letto la documentazione, non ho trovato alcun esempio della funzione e non capisco come usare uname. Qualcuno può spiegarmi come usarlo? sarebbe bello poter scrivere anche un esempio. Grazie in anticipo.C come utilizzare la funzione uname
risposta
La funzione uname()
accetta un puntatore alla struttura utsname
che memorizzerà il risultato come input. Pertanto, è sufficiente creare un'istanza temporanea utsname
, passarne l'indirizzo su uname
e leggere il contenuto di questa struttura dopo che la funzione ha avuto esito positivo.
struct utsname retval;
if(uname(&retval) < 0) { // <----
perror("Failed to uname");
// error handling...
} else {
printf("System name = %s\n", retval.sysname);
// print other info....
// see http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/utsname.h.html
// for other members...
}
Innanzitutto, includono l'intestazione:
#include <sys/utsname.h>
Poi, definire una struttura utsname:
struct utsname unameData;
Quindi chiamare uname() con un puntatore alla struttura:
uname(&unameData); // Might check return value here (non-0 = failure)
Dopo questo, la struttura wil l contengono le informazioni che si desidera:
printf("%s", unameData.sysname);
http://opengroup.org/onlinepubs/007908775/xsh/sysutsname.h.html
Dalla documentazione, sembra che usereste in questo modo:
struct utsname my_uname;
if(uname(&my_uname) == -1)
printf("uname call failed!");
else
printf("System name: %s\nNodename:%s\nRelease:%s\nVersion:%s\nMachine:%s\n",
my_uname.sysname, my_uname.nodename, my_uname.release,my_uname.version,my_uname.machine);
Un esempio completamente funzionante vale più di mille parole . ;-)
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>
int main(void) {
struct utsname buffer;
errno = 0;
if (uname(&buffer) != 0) {
perror("uname");
exit(EXIT_FAILURE);
}
printf("system name = %s\n", buffer.sysname);
printf("node name = %s\n", buffer.nodename);
printf("release = %s\n", buffer.release);
printf("version = %s\n", buffer.version);
printf("machine = %s\n", buffer.machine);
#ifdef _GNU_SOURCE
printf("domain name = %s\n", buffer.domainname);
#endif
return EXIT_SUCCESS;
}
Dovrebbe usare 'perror' in caso di errore. Non è necessario gestire il 'EFAULT' specialmente (non succederà nel tuo codice, dato che' buffer' è un indirizzo valido di una variabile locale) –
Grazie Basile. In effetti 'perror' è meglio di' switch (errno) 'e ho modificato il post per riflettere questo. Il codice gestiva esplicitamente "EFAULT" perché lo scrivevo pensando all'insegnamento, ma in realtà questo particolare esempio non arriverebbe mai. – tupiniquim
- 1. Come utilizzare la funzione generica in C++?
- 2. Come utilizzare la funzione string.substr()?
- 3. Utilizzare la funzione PrintSpoolerAPI SetForm() in C#
- 4. Come utilizzare la funzione ko.validation.group
- 5. Come utilizzare la funzione Unlink()
- 6. Come utilizzare la funzione bulkInsert() in Android?
- 7. Come utilizzare la funzione R 'Sweep'
- 8. come utilizzare la funzione __doPostBack in asp.net
- 9. Come utilizzare la nuova funzione computeIfAbsent?
- 10. jQuery: come utilizzare correttamente la funzione .stop()?
- 11. Come utilizzare la funzione cvProjectPoints2 di OpenCV
- 12. come utilizzare la funzione addHTML in jsPDF
- 13. problema cercando di utilizzare la funzione C qsort
- 14. Come chiamare la funzione anonima in C#?
- 15. Come utilizzare la funzione substr() all'interno della funzione preg_replace()?
- 16. quando utilizzare la funzione htmlspecialchars()?
- 17. Impossibile utilizzare la funzione React.findDOMNode
- 18. SQLGetInfo - Come utilizzare questa funzione
- 19. Quando utilizzare la funzione membro statico?
- 20. C#: Come utilizzare SHOpenFolderAndSelectItems
- 21. Come utilizzare la funzione di namespace con dplyr :: mutate_each?
- 22. Utilizzare la funzione principale di R
- 23. Come utilizzare una funzione di classe in C++?
- 24. C: Usando la funzione memset
- 25. Come utilizzare Rundll32 per eseguire la funzione DLL?
- 26. Come utilizzare la funzione diagonale D3 per tracciare linee curve?
- 27. Come utilizzare la porta ZXing C#
- 28. Come chiamare la funzione C# da java
- 29. Come funziona la funzione printf in C?
- 30. come funziona la funzione system() in C++?
Quando dici piattaforma, cosa intendi? x86 vs x64? Linux vs BSD? AMD vs Intel? –
scusate non l'ho specificato, intendo per istance i686, x86, x64 ... –