假设我有myname.c被编译为获取可执行文件myname。 我想在命令后打印操作系统名称:
$myname --系统名称
输出:Linux
这是我到目前为止所拥有的
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/utsname.h>
int main(int argc, char **argv) {
struct utsname buffer;
char str[70];
scanf("%[^n]",str);
if (uname(&buffer) == system-name){
printf(
"%s",
(&buffer)->sysname,
);
}
我认为这应该有效(您的缓冲区不是指针,并且您的 if 语句不合理,您还应该在该声明方法中从 main 返回一些内容):
#include <stdio.h>
#include <stdlib.h>
#include <sys/utsname.h>
int main(int argc, char **argv) {
struct utsname uts;
if(uname(&uts) !=0 ) {
return EXIT_FAILURE;
}
printf("%sn",uts.sysname);
return EXIT_SUCCESS;
}
在 Linux 上要获得一些信息,您可以使用以下内容:
#include<stdio.h>
#include<sys/utsname.h>
int main(void){
struct utsname detect;
uname(&detect);
printf("System name - %s n", detect.sysname);
printf("Nodename - %s n", detect.nodename);
printf("Release - %s n", detect.release);
printf("Version - %s n", detect.version);
printf("Machine - %s n", detect.machine);
printf("Domain name - %s n", detect.__domainname);
return 0;
}
输出:
System name - Linux
Nodename - michi
Release - 3.19.0-32-generic
Version - #37~14.04.1-Ubuntu SMP Thu Oct 22 09:41:40 UTC 2015
Machine - x86_64
Domain name - (none)
我认为这就是你要找的:
if (strcmp(str, "system-name") == 0){
printf("%sn", buffer.sysname);
}
strcmp()
是用于比较字符串的 C 函数,因此这将检查用户是否输入了system-name
。
当您有一个结构时,您可以使用.
来访问其中的元素,您无需获取其地址并使用间接寻址。您在printf()
参数列表的末尾还有一个额外的逗号。