使用C语言获取linux系统相关信息
最近在写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系统相关信息的更多相关文章
- Linux sysinfo获取系统相关信息
Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...
- Linux下使用fstatfs/statfs查询系统相关信息
Linux下使用fstatfs/statfs查询系统相关信息 1. 功能 #include < sys/statfs.h > int statfs(const char *path, ...
- Linux系统在信息社会的发展
Linux系统在信息社会的发展 随着信息技术的高速发展并迅速渗透到社会生活的各个方面,Linux日益成为人们学习.工作.生活不可缺少的基本工具,再过不了几年,不会使用Linux,就会象不识字一样使人举 ...
- 获取Java系统相关信息
package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...
- 查看Linux系统软硬件信息
查看Linux系统软硬件信息 查看计算机CPU信息 cat /proc/cpuinfo 查看文件系统信息 cat /proc/filesystems 查看主机中断信息 cat /proc/interr ...
- uname---用于打印当前系统相关信息
uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...
- 获取系统相关信息 (CPU使用率 内存使用率 系统磁盘大小)
引言 在软件开个过程中,对于软件的稳定性和使用率也是我们需要关注的 . 使用sigar来监控,简单方便! 使用说明:下载sigar jar及配合sigar的dll文件来用,需要将dll文件放到JD ...
- Centos-操作系统相关信息-uname
uname 获取系统相关信息 相关选项 -a 显示全部信息 -m 显示系统CPU架构 x86_64 -n 显示主机名, 和 hostname 一样 -s 获取系统类型 -r 内核信息
- 查看Linux系统相关版本信息
1.“uname -a” 查看电脑以及操作系统的相关信息 2.“cat /proc/version” 查看运行的内核版本 3."cat /etc/redhat-release", ...
随机推荐
- A - 高精度(大数)N次方(第二季水)
Description Problems involving the computation of exact values of very large magnitude and precision ...
- xaml控件样式大全(太有用了)C#
地址:链接:http://pan.baidu.com/s/1jGlMyEi 密码:zaeg http://blog.csdn.net/lhx527099095/article/category/943 ...
- 中国大学MOOC-翁恺-C语言程序设计习题集
今年网易出了“中国大学MOOC”,于是选了浙大翁恺老师的“C语言程序设计”学习,近期打算把自己在该课程中的PAT习题解答做一个记录,等自己编程能力提高后再来看现在写的代码哪里还有写的不好,可以改进的地 ...
- 正式学习React (七) react-router 源码分析
学习react已经有10来天了,对于react redux react-redux 的使用流程和原理,也已经有一定的了解,在我上一篇的实战项目里,我用到了react-route,其实对它还只是 停留在 ...
- linux的NetworkManager服务(转)
在开启NetworkManager服务的情况下,在终端下敲“service network restart”命令: 正在关闭接口 eth0: 设备状态:3 (断开连接) [确定] 正在关闭接口 eth ...
- [Leetcode][Python]43: Multiply Strings
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 43: Multiply Stringshttps://leetcode.co ...
- linux之SQL语句简明教程---CREATE TABLE
表格是数据库中储存资料的基本架构.在绝大部份的情况下,数据库厂商不可能知道您需要如何储存您的资料,所以通常您会需要自己在数据库中建立表格.虽然许多数据库工具可以让您在不需用到 SQL 的情况下建立表格 ...
- 网易云课堂_C++开发入门到精通_章节2:引用和函数的高级用法
课时6函数重载 函数重载 在C语言头文件中的extern "C" //常见的C语言头文件格式 #ifndef _FUNC_ #define _FUNC_ #ifdef __cplu ...
- 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)
第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...
- hdu 1035 Robot Motion(模拟)
Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...