问题描述
|
解决方法
在Linux中,您可以简单地使用以下功能:
int uname(struct utsname *buf);
通过包含标题
#include <sys/utsname.h>
它返回系统信息作为结构的一部分:
struct utsname
{
char sysname[]; /* Operating system name (e.g.,\"Linux\") */
char nodename[]; /* Name within \"some implementation-defined network\" */
char release[]; /* OS release (e.g.,\"2.6.28\") */
char version[]; /* OS version */
char machine[]; /* Hardware identifier */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
};
好吧,如果不是全部的话,它至少会给您带来3英镑的收益。应该有其他可用的api可以显示您需要的所有信息。您将需要查看文档并进行一些搜索。
编辑:
哦,好吧,我刚刚从互联网上删除了这个。该程序将帮助您以编程方式运行Linux命令。
char* GetSystemOutput(char* cmd)
{
int buff_size = 32;
char* buff = new char[buff_size];
char* ret = NULL;
string str = \"\";
int fd[2];
int old_fd[3];
pipe(fd);
old_fd[0] = dup(STDIN_FILENO);
old_fd[1] = dup(STDOUT_FILENO);
old_fd[2] = dup(STDERR_FILENO);
int pid = fork();
switch(pid)
{
case 0:
close(fd[0]);
close(STDOUT_FILENO);
close(STDERR_FILENO);
dup2(fd[1],STDOUT_FILENO);
dup2(fd[1],STDERR_FILENO);
system(cmd);
//execlp((const char*)cmd,cmd,0);
close (fd[1]);
exit(0);
break;
case -1:
cerr << \"GetSystemOutput/fork() error\\n\" << endl;
exit(1);
default:
close(fd[1]);
dup2(fd[0],STDIN_FILENO);
int rc = 1;
while (rc > 0)
{
rc = read(fd[0],buff,buff_size);
str.append(buff,rc);
//memset(buff,buff_size);
}
ret = new char [strlen((char*)str.c_str())];
strcpy(ret,(char*)str.c_str());
waitpid(pid,NULL,0);
close(fd[0]);
}
dup2(STDIN_FILENO,old_fd[0]);
dup2(STDOUT_FILENO,old_fd[1]);
dup2(STDERR_FILENO,old_fd[2]);
return ret;
}
api用法:GetSystemOutput(\"/usr/bin/lsb_release -a\")
并遵循以下命令:
cat /proc/cpuinfo = tells you cpu info
cat /proc/meminfo = tells you memory info
lspci = tells you hardware that is attached (at least if the kernel recognizes it)
cat /proc/ide/hda/* = tells you info of your first ide hard-drive.
, 在/ proc目录中四处看看。有很多东西可能被认为是系统属性,但是您很快就能确定您对哪些属性感兴趣。
cat /proc/somedir/somefile
是您要用来安全浏览/ proc的命令。
, 每个操作系统都有一个API,可让您与其通信。
遗憾的是,这并不是统一的,您需要阅读搜索以查找目标操作系统的API。
通常,通过API,您可以获得所需的大多数信息。