使用C语言获取linux系统相关信息

最近在写shell的时候,涉及到了获取环境变量参数和本地计算机相关信息,包括计算机设备名,用户名的信息,在这里简单总结一下。
获取环境变量各项参数,可以直接使用getenv函数。man中关于getenv函数的声明如下:

 #include <stdlib.h>
char *getenv(const char *name);

函数中,参数name 为环境变量的名称, 如果该变量存在则会返回指向该内容的指针. 环境变量的格式为name=value。执行成功则返回指向该内容的指针, 找不到符合的环境变量名称则返回NULL。

这里我使用环境变量获取用户名称和当前目录为例,首先我们知道在环境变量中,用户名保存在“LOGNAME”中,而当前目录保存在"PWD"中,所以函数调用应该为

getenv(“LOGNAME”)
getenv(“PWD”);

所以,简单的测试程序就出来了,程序源码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4
 5 int main(int argc,char **argv)
 6 {
 7     char *name;
 8     char *path;
 9
10     name = getenv("LOGNAME");
11     path = getenv("PWD");
12
13     printf("logname = %s\n",name);
14     printf("pwd = %s\n",path);
15
16     return 0;
17 }

测试程序没有包含错误错误,如有需要,请自行加上。在我的电脑上运行如下:

[email protected]:~/linuxc/tmp$ ./a.out
logname = wangbo
pwd = /home/wangbo/linuxc/tmp

但是呢,我们试着请通过环境变量获取系统设备名称,是无法获取的。原因我也不太清楚,如果知道的话,赶快告诉我吧。

不能从环境变量获取设备名,就只能从其他地方获取了。恩,这里给大家介绍一个函数,gethostname函数,可以直接获取系统设备名。

声明如下:

#include <unistd.h>
int gethostname(char *name, size_t len);

函数中,name是指向你所设置的保存设备名的字符串的指针,而len是name的大小,成功的话返回0,获取失败,返回-1,错误代码保存在errno中。

函数比较简单,这里直接给出测试代码:

 1 #include <unistd.h>
 2 #include <stdio.h>
 3
 4 int main(int argc, char **argv)
 5 {
 6     char hostname[32];
 7
 8     if( gethostname(hostname,sizeof(hostname)) )
 9     {
10         perror("gethostname");
11         return (1);
12     }
13     printf("localhost name:%s\n",hostname);
14
15     return 0;
16 }

在我的电脑上运行结果如下:

[email protected]:~/linuxc/tmp$ ./a.out
localhost name:iDina-PC

后来查询相关资料,又发现一个函数,uname,可以获取系统包括版本在内的相关信息,函数声明如下:

#include <sys/utsname.h>
int uname(struct utsname *buf);

struct utsname 是一个系统定义好的结构体,结构体定义如下:

struct utsname{
    char sysname[];       /* 操作系统名称 (e.g., "Linux") */
    char nodename[];      /* 当前设备在网络上的名称 (e.g,"localhost.localdomain")*/
    char release[];       /* 系统发布级别(e.g., "2.6.28") */
    char version[];       /* 系统发布版本 */
    char machine[];       /* 当前设备硬件体系(e.g.,"i686") */
    #ifdef _GNU_SOURCE
    char domainname[];    /* NIS或者YP域名 */
    #endif
};

函数正确返回0,错误返回-1.错误代码保存在errno中。

和上面一样,比较简单,测试代码如下:

 1 #include <sys/utsname.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4
 5 int main(int argc,char **argv)
 6 {
 7     struct utsname buf;
 8
 9     if(uname(&buf))
10     {
11         perror("uname");
12         exit(1);
13     }
14
15     printf("sysname:%s\n",buf.sysname);
16     printf("nodename:%s\n",buf.nodename);
17     printf("release:%s\n",buf.release);
18     printf("version:%s\n",buf.version);
19     printf("machine:%s\n",buf.machine);
20
21     return 0;
22 }

我的电脑上运行结果如下:

[email protected]:~/linuxc/tmp$ ./a.out
sysname:Linux
nodename:iDina-PC
release:3.13.0-32-generic
version:#57-Ubuntu SMP Tue Jul 15 03:51:12 UTC 2014
machine:i686

使用C语言获取linux系统相关信息

时间: 2024-08-09 08:56:46

使用C语言获取linux系统相关信息的相关文章

Linux下使用fstatfs/statfs查询系统相关信息

Linux下使用fstatfs/statfs查询系统相关信息 1.   功能 #include < sys/statfs.h > int statfs(const char *path, struct statfs *buf); int fstatfs(int fd, struct statfs *buf); 查询文件系统相关的信息. 2.   參数 path: 须要查询信息的文件系统的文件路径名. fd: 须要查询信息的文件系统的文件描写叙述符. buf:下面结构体的指针变量,用于储存文件系

Linux sysinfo获取系统相关信息

Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <linux/unistd.h> /* for _syscallX macros/related stuff */ #include <linux/kernel.h> /* for struct sysinfo */ //_syscall1(int, sysi

Linux系统硬件信息

对于linux系统硬件信息的查看,主要针对cpu.memory.disk,以及网卡,每一种硬件的信息通常会有多种查看方法. 1.cpu 查看/proc/cpuinfo文件 可查看cpu的详细信息. [[email protected]_server ~]# cat /proc/cpuinfo  vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Xeon(TM) CPU 2.80GHz stepping

获取Java系统相关信息

1 package com.test; 2 3 import java.util.Properties; 4 import java.util.Map.Entry; 5 6 import org.junit.Test; 7 8 public class SystemTest { 9 10 /** 11 * 获取Java系统相关信息 12 * @throws Exception 13 */ 14 @Test 15 public void testSys() throws Exception { 1

查看Linux系统版本信息相关指令

Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a   (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linux 2.# cat /proc/version (Linux查看当前操作系统版本信息) Linux version 2.4

Java中获取系统相关信息——sigar

一.sigar简介 sigar中文名是系统信息收集和报表工具,是一个开源的工具,提供了跨平台的系统信息收集的API,可以和绝大多数操作系统和大多数版本打交道,可以收集的信息包括: 1.操作系统的信息,包括:dataModel.cpuEndian.name.version.arch.machine.description.patchLevel.vendor.vendorVersion.vendorName.vendorCodeName 2.CPU信息,包括:基本信息(vendor.model.mh

查看Linux系统版本信息

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

【LInux】查看Linux系统版本信息

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

Linux系统相关

1. 图形界面启动的是哪个运行级别? 而我们平时用的命令行模式又是哪个运行级别? 除了图形和命令行模式两个常用级别外,其他运行级别代表什么涵义?如何更改系统的运行级别?图形界面启动的是5级别,命令行模式是3级别,除了5级别和3级别外,还有0,1,2,4,6等级别,其中0级别表示关机,1级别表示单用户模式,2级别表示无NFS服务的3级别,4级别为保留级别,6级别为重启.要想更改系统的级别,需要修改配置文件 /etc/inittab 的最后一行,另外也可以使用命令 init 0, init 1 ..