131 lines
1.9 KiB
C
131 lines
1.9 KiB
C
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <sys/utsname.h>
|
|
#include "config.h"
|
|
|
|
#if defined(OS_NAME)
|
|
#elif defined(__ANDROID__)
|
|
#define OS_NAME "Android"
|
|
|
|
#elif defined(__linux__)
|
|
#define OS_NAME "Linux"
|
|
|
|
#elif defined(__OpenBSD__)
|
|
#define OS_NAME "OpenBSD"
|
|
|
|
#elif defined(__FreeBSD_)
|
|
#define OS_NAME "FreeBSD"
|
|
|
|
#elif defined(__NetBSD_)
|
|
#define OS_NAME "NetBSD"
|
|
|
|
#else
|
|
#define OS_NAME "unknow"
|
|
|
|
#endif
|
|
|
|
enum {
|
|
SYSNAME,
|
|
NODENAME,
|
|
RELEASE,
|
|
VERSION,
|
|
MACHINE,
|
|
OS,
|
|
CPU,
|
|
ALL,
|
|
COUNT
|
|
};
|
|
|
|
char flags[COUNT];
|
|
unsigned int counter = 0;
|
|
|
|
void print(const char *msg) {
|
|
if (counter > 0 && !flags[ALL])
|
|
putchar(' ');
|
|
|
|
printf("%s", msg);
|
|
counter++;
|
|
|
|
if (flags[ALL] && counter <= COUNT)
|
|
putchar(' ');
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
struct utsname uts;
|
|
if (uname(&uts)) {
|
|
fprintf(stderr, "uname: %s", strerror(errno));
|
|
return 1;
|
|
}
|
|
|
|
if (argc == 1) {
|
|
printf("%s\n", uts.sysname);
|
|
return 0;
|
|
}
|
|
|
|
int opt;
|
|
while ((opt = getopt(argc, argv, "asnrvmop")) != -1) {
|
|
switch (opt) {
|
|
case 'a':
|
|
flags[ALL] = 1;
|
|
break;
|
|
|
|
case 's':
|
|
flags[SYSNAME] = 1;
|
|
break;
|
|
|
|
case 'n':
|
|
flags[NODENAME] = 1;
|
|
break;
|
|
|
|
case 'r':
|
|
flags[RELEASE] = 1;
|
|
break;
|
|
|
|
case 'v':
|
|
flags[VERSION] = 1;
|
|
break;
|
|
|
|
case 'm':
|
|
flags[MACHINE] = 1;
|
|
break;
|
|
|
|
case 'o':
|
|
flags[OS] = 1;
|
|
break;
|
|
|
|
case 'p':
|
|
flags[CPU] = 1;
|
|
break;
|
|
|
|
default:
|
|
printf("uname [asnrvmop]\n\t-a All\n\t-s Sys\n\t-n Nodename\n\t-r Release\n\t-v Version\n\t-m Machine\n\t-o Os name\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if (flags[SYSNAME] || flags[ALL])
|
|
print(uts.sysname);
|
|
|
|
if (flags[NODENAME] || flags[ALL])
|
|
print(uts.nodename);
|
|
|
|
if (flags[RELEASE] || flags[ALL])
|
|
print(uts.release);
|
|
|
|
if (flags[VERSION] || flags[ALL])
|
|
print(uts.version);
|
|
|
|
if (flags[MACHINE] || flags[ALL])
|
|
print(uts.machine);
|
|
|
|
if (flags[OS] || flags[ALL])
|
|
print(OS_NAME);
|
|
|
|
if (flags[CPU] || flags[ALL])
|
|
print("unknow");
|
|
|
|
putchar('\n');
|
|
}
|