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

最近在写shell的时候,涉及到了获取环境变量参数和本地计算机相关信息,包括计算机设备名,用户名的信息,在这里简单总结一下。

获取环境变量各项参数,可以直接使用getenv函数。man中关于getenv函数的声明如下:

#include

char *getenv(const char *name);

函数中,参数name 为环境变量的名称, 如果该变量存在则会返回指向该内容的指针.

环境变量的格式为name=value。执行成功则返回指向该内容的指针, 找不到符合的环境变量名称则返回NULL。

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

getenv(“LOGNAME”)

getenv(“PWD”);

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

1 #include

2 #include

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 }

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

wangbo@iDina-PC:~/linuxc/tmp$ ./a.outlogname =wangbopwd = /home/wangbo/linuxc/tmp

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

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

声明如下:

#include

int gethostname(char *name, size_t len);

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

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

1 #include

2 #include

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 }

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

wangbo@iDina-PC:~/linuxc/tmp$ ./a.out

localhost name:iDina-PC

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

#include

int uname(struct utsname *buf);

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

structutsname{char sysname[];

char nodename[];

char release[];

char version[];

char machine[];#ifdef _GNU_SOURCEchar domainname[];

#endif};

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

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

1 #include

2 #include

3 #include

4

5 int main(int argc,char **argv)6{7 structutsname 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 }

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

wangbo@iDina-PC:~/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 2014machine:i686

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值