当前位置: 技术问答>linux和unix
再问一个System的问题
来源: 互联网 发布时间:2016-06-02
本文导语: 小弟在程序中需要判断当前用户的Linux是Fedora、Ubuntu或者其他版本的Linux。 我知道在终端输入uname -a就可以从终端看到当前系统的类型或者版本。 于是就想到在程序里面调用system("uname -a ");。问题就出来了,有...
小弟在程序中需要判断当前用户的Linux是Fedora、Ubuntu或者其他版本的Linux。
我知道在终端输入uname -a就可以从终端看到当前系统的类型或者版本。
于是就想到在程序里面调用system("uname -a ");。问题就出来了,有什么办法能够让程序接受调用system("uname -a ")后在终端显示的内容呢?
在Google上找了很久没有找到相关帮助,自己就想到把终端显示出来的内容存到一个临时文件中,调用如下system("uname -a > temp.ini");然后程序再通过读取文件内容的方法获取当前Linux的版本。最后程序退出时候再删除刚刚的临时文件temp.ini
上面这种方法是可行的,但个人总感觉有点太繁琐了,还涉及到在磁盘上读写文件。所有想问各位大虾两个问题:
1.程序需要判断当前Linux的版本有没有其他简单的方法,例如直接调用一个系统接口就知道当前的系统是Fedora或者Ubuntu等等。
2.有什么办法能够让程序接受调用system("uname -a ")后在终端显示的内容? 除了我上面写的通过写到临时文件里面,有更简便的方法么?
谢谢了。
我知道在终端输入uname -a就可以从终端看到当前系统的类型或者版本。
于是就想到在程序里面调用system("uname -a ");。问题就出来了,有什么办法能够让程序接受调用system("uname -a ")后在终端显示的内容呢?
在Google上找了很久没有找到相关帮助,自己就想到把终端显示出来的内容存到一个临时文件中,调用如下system("uname -a > temp.ini");然后程序再通过读取文件内容的方法获取当前Linux的版本。最后程序退出时候再删除刚刚的临时文件temp.ini
上面这种方法是可行的,但个人总感觉有点太繁琐了,还涉及到在磁盘上读写文件。所有想问各位大虾两个问题:
1.程序需要判断当前Linux的版本有没有其他简单的方法,例如直接调用一个系统接口就知道当前的系统是Fedora或者Ubuntu等等。
2.有什么办法能够让程序接受调用system("uname -a ")后在终端显示的内容? 除了我上面写的通过写到临时文件里面,有更简便的方法么?
谢谢了。
|
用pipe就可以捕捉到 uname -a 的输出:
#include
#include
#include
#include
int main()
{
FILE *fp;
char buffer[BUFSIZ + 1];
int count;
memset(buffer, '', sizeof(buffer));
fp = popen("uname -a", "r");
if (fp != NULL) {
count = fread(buffer, sizeof(char), BUFSIZ, fp);
if (count > 0) {
//得到输出内容,保存在buffer
printf("Output was:-n%sn", buffer);
}
pclose(read_fp);
exit0;
}
exit 1;
}
|
建议楼主直接用系统函数uname。
SYNOPSIS
#include
int uname(struct utsname *name);
DESCRIPTION
The uname() function stores information identifying the
current operating system in the structure pointed to by
name.
The uname() function uses the utsname structure, defined in
, whose members include:
char sysname[SYS_NMLN];
char nodename[SYS_NMLN];
char release[SYS_NMLN];
char version[SYS_NMLN];
char machine[SYS_NMLN];
The uname() function returns a null-terminated character
string naming the current operating system in the character
array sysname. Similarly, the nodename member contains the
name by which the system is known on a communications net-
work. The release and version members further identify the
operating system. The machine member contains a standard
name that identifies the hardware on which the operating
system is running.
RETURN VALUES
Upon successful completion, a non-negative value is
returned. Otherwise, -1 is returned and errno is set to
indicate the error.
SYNOPSIS
#include
int uname(struct utsname *name);
DESCRIPTION
The uname() function stores information identifying the
current operating system in the structure pointed to by
name.
The uname() function uses the utsname structure, defined in
, whose members include:
char sysname[SYS_NMLN];
char nodename[SYS_NMLN];
char release[SYS_NMLN];
char version[SYS_NMLN];
char machine[SYS_NMLN];
The uname() function returns a null-terminated character
string naming the current operating system in the character
array sysname. Similarly, the nodename member contains the
name by which the system is known on a communications net-
work. The release and version members further identify the
operating system. The machine member contains a standard
name that identifies the hardware on which the operating
system is running.
RETURN VALUES
Upon successful completion, a non-negative value is
returned. Otherwise, -1 is returned and errno is set to
indicate the error.