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

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

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

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

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

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

 #include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc,char **argv)
{
char *name;
char *path; name = getenv("LOGNAME");
path = getenv("PWD"); printf("logname = %s\n",name);
printf("pwd = %s\n",path); return ;
}

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

wangbo@iDina-PC:~/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中。

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

 #include <unistd.h>
#include <stdio.h> int main(int argc, char **argv)
{
char hostname[]; if( gethostname(hostname,sizeof(hostname)) )
{
perror("gethostname");
return ();
}
printf("localhost name:%s\n",hostname); return ;
}

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

wangbo@iDina-PC:~/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中。

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

 #include <sys/utsname.h>
#include <stdio.h>
#include <stdlib.h> int main(int argc,char **argv)
{
struct utsname buf; if(uname(&buf))
{
perror("uname");
exit();
} printf("sysname:%s\n",buf.sysname);
printf("nodename:%s\n",buf.nodename);
printf("release:%s\n",buf.release);
printf("version:%s\n",buf.version);
printf("machine:%s\n",buf.machine); return ;
}

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

wangbo@iDina-PC:~/linuxc/tmp$ ./a.out
sysname:Linux
nodename:iDina-PC
release:3.13.--generic
version:#-Ubuntu SMP Tue Jul :: UTC
machine:i686

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

  1. Linux sysinfo获取系统相关信息

    Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...

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

    Linux下使用fstatfs/statfs查询系统相关信息 1.   功能 #include < sys/statfs.h > int statfs(const char *path, ...

  3. Linux系统在信息社会的发展

    Linux系统在信息社会的发展 随着信息技术的高速发展并迅速渗透到社会生活的各个方面,Linux日益成为人们学习.工作.生活不可缺少的基本工具,再过不了几年,不会使用Linux,就会象不识字一样使人举 ...

  4. 获取Java系统相关信息

    package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...

  5. 查看Linux系统软硬件信息

    查看Linux系统软硬件信息 查看计算机CPU信息 cat /proc/cpuinfo 查看文件系统信息 cat /proc/filesystems 查看主机中断信息 cat /proc/interr ...

  6. uname---用于打印当前系统相关信息

    uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...

  7. 获取系统相关信息 (CPU使用率 内存使用率 系统磁盘大小)

    引言 在软件开个过程中,对于软件的稳定性和使用率也是我们需要关注的 .  使用sigar来监控,简单方便!  使用说明:下载sigar jar及配合sigar的dll文件来用,需要将dll文件放到JD ...

  8. Centos-操作系统相关信息-uname

    uname 获取系统相关信息 相关选项 -a 显示全部信息 -m 显示系统CPU架构 x86_64 -n  显示主机名, 和 hostname 一样 -s 获取系统类型 -r   内核信息

  9. 查看Linux系统相关版本信息

    1.“uname -a” 查看电脑以及操作系统的相关信息 2.“cat /proc/version” 查看运行的内核版本 3."cat /etc/redhat-release",  ...

随机推荐

  1. HDU 5727 - Necklace

    题意:( 0 <= n <= 9 )    现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环,    已知有些阴珠子和阳珠子不能放在相邻的位置,否则这颗阳珠子就会失去功效,   ...

  2. 沼跃鱼早已看穿了一切 C/C++

      沼跃鱼早已看穿了一切 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 593  Solved: 229[Submit][Status][Web Boa ...

  3. JAVA多线程下,获取递增的序列号

    场景描述: 1,目前我们的系统可以简单归纳成MVC的架构模式 2,每个前端的请求过来,都会在C层开启事务,最后处理结束后,也在在C层关闭事务(实际是在C层的底层统一做了事务的开启和提交):      ...

  4. Hadoop配置文件-mapred-site.xml

    name value Description hadoop.job.history.location   job历史文件保存路径,无可配置参数,也不用写在配置文件里,默认在logs的history文件 ...

  5. MSSQL 获取数据库字段类型

    SELECT col.name AS 列名, typ.name as 数据类型, col.max_length AS 占用字节数, col.precision AS 数字长度, col.scale A ...

  6. SIEM思考

    https://securosis.com/blog/comments/understanding-and-selecting-siem-log-management-introduction/ ht ...

  7. VC内存溢出一例 –- 调用约定不一致 (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE)

    VC (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE) 问题记录 VC内存溢出一例 –- 调用约定不一致 (_CRT_DEBUGGER_HOOK(_CRT_DE ...

  8. 文艺编程 Literate Programming

    (译注:这篇文章是 Donald Knuth 一篇1983年的论文:Literate Programming 的介绍部分.有人翻译为“字面编程”,是极其错误的说法,literate 根本就没有“字面” ...

  9. 2014第8周一JS正则小问题

    今天解决一个关于JS正则表达式的小问题,需求是匹配6位或9位数字,我原来的写法是这样的/^(/d){6}|(/d){9}$/.test(val),但测试发现输入1234567时也返回成功,很郁闷搜索了 ...

  10. Ubuntu 查找命令

    Ubuntu 查找文件夹 使用find命令查找find / -name 文件夹名称 -type d找到结果中含有路径 查找命令 从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR” ...