最近在写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. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)

    找了好多资料,要么是IE可以用,但是谷歌不行,,还有就是两个都可以用的,图片大小显示不全.终于找到一个好一点的js,先贴一下代码. 1.rotate.js jQuery.fn.rotate = fun ...

  2. isNUll ,对于sql中的一个表的description的NULL和空格的处理

    select client.clientname ,description,'client2'= case when client.Description IS NULL then  client.c ...

  3. 【Tika基础教程之一】Tika基础教程

    一.快速入门 1.Tika是一个用于文本解释的框架,其本身并不提供任何的库用于解释文本,而是调用各种各样的库,如POI,PDFBox等. 使用Tika,可以提取文件中的作者.标题.创建时间.正文等内容 ...

  4. 解决ios双击页面上移问题

    做webapp时,ios有个默认双击事件,会缩放页面,并将当前点击的位置居中到屏幕,本来也没什么,但是当页面中有fixed定位的元素时,这时候你就会神奇的发现,fixed元素所见不所得了! 还有就是页 ...

  5. 滑动冲突的补充——Event的流程走向

    一.之前分析的滑动冲突,并没有讲述event事件是如何分发到不同的控件 View的滑动冲突 现在分析一下滑动冲突event事件的流向 假设:  我们的一个事件为  点下——>左滑动一次——> ...

  6. c语言 列出系统进程

    #include <stdio.h> #include "stdafx.h" #include <Windows.h> #include <strin ...

  7. 李维作答 《insideVCL》——李维实在很勤奋,而且勇于突破,从不以旧的内容充数

    (编者按)<Inside VCL(VCL核心架构剖析)>一书出版以来,众多热心读者给李维先生.博文视点公司.CSDN写来信件,有更多朋友在各个论坛上发表关于该书的言论.读者们不但盛赞该书, ...

  8. 【关于360极速浏览器的xx极速模式自动切换到兼容模式】

    原理上是可以的. 1  360基于Chromium 开源浏览器内核,它本身就是一个壳子.. 2  7.0之后的极速浏览器,不支持 它官方的那个声明标记.<meta name=”renderer” ...

  9. JS:函数多个参数默认值指定

    函数有一个参数时,以往这样定义(参数为p1): function mfun(p1){ … } 当需要为p1设定一个默认值时 function mfun(p1){ if(p1===undefined) ...

  10. MS Sql 查询数据库连接数

    SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN (SELECT [DBID]FROM [Master].[dbo].[SYSDA ...