linux下confstr与uname函数_获取C库与内核信息

#include <stdio.h>
#include <sys/utsname.h>	//uname

int main(int argc, char **argv[])
{
	struct utsname  u;
	if (uname(&u) != -1) {
		printf("获取当前内核的名称和信息例如以下\n"
			   "sysname:%s\n"
			   "nodename:%s\n"
			   "release:%s\n"
			   "version:%s\n"
			   "machine:%s\n"
			   , u.sysname, u.nodename, u.release, u.version, u.machine);
	}

	return 0;
}

输出例如以下:

获取当前内核的名称和信息例如以下
sysname:Linux
nodename:fes
release:2.6.32-220.el6.x86_64
version:#1 SMP Wed Nov 9 08:03:13 EST 2011
machine:x86_64

size_t confstr(int name, char *buf, size_t len);

confstr函数获取依赖配置的字符串变量的值

1、_CS_GNU_LIBC_VERSION,the GNU C library version on this system

2、_CS_GNU_LIBPTHREAD_VERSION,the POSIX implementation supplied by this C library

3、_CS_PATH,A value for the PATH variable which indicates where all the POSIX.2 standard utilities can be found.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>		//confstr

int main(int argc, char **argv[])
{
	char *pathbuf, *gun_libpthread_version_buf, *gun_libc_version_buf;
	size_t n;

	n = confstr(_CS_PATH,NULL,(size_t) 0);
	pathbuf = malloc(n);
	if (pathbuf == NULL)
		abort();
	confstr(_CS_PATH, pathbuf, n);
	printf("_CS_PATH, A value for the PATH variable:%s\n", pathbuf);
	free(pathbuf);
	pathbuf = NULL;

	n = confstr(_CS_GNU_LIBPTHREAD_VERSION,NULL,(size_t) 0);
	if (n > 0) {
		gun_libpthread_version_buf = malloc(n);
	}
	if (gun_libpthread_version_buf == NULL)
		abort();
	confstr(_CS_GNU_LIBPTHREAD_VERSION, gun_libpthread_version_buf, n);
	printf("_CS_GNU_LIBPTHREAD_VERSION, the POSIX implementation supplied by this C library:%s\n", gun_libpthread_version_buf);
	free(gun_libpthread_version_buf);
	gun_libpthread_version_buf = NULL;

	n = confstr(_CS_GNU_LIBC_VERSION,NULL,(size_t) 0);
	if (n > 0) {
		gun_libc_version_buf = malloc(n);
	}
	if (gun_libc_version_buf == NULL)
		abort();
	confstr(_CS_GNU_LIBC_VERSION, gun_libc_version_buf, n);
	printf("_CS_GNU_LIBC_VERSION, the GNU C library version on this system: %s\n" 			, gun_libc_version_buf);
	free(gun_libc_version_buf);
	gun_libc_version_buf = NULL;

	return 0;
}

输出结果例如以下:

_CS_PATH, A value for the PATH variable:/bin:/usr/bin
_CS_GNU_LIBPTHREAD_VERSION, the POSIX implementation supplied by this C library:NPTL 2.12
_CS_GNU_LIBC_VERSION, the GNU C library version on this system: glibc 2.12
时间: 2024-10-11 05:59:48

linux下confstr与uname函数_获取C库与内核信息的相关文章

linux 下getch()函数实现

//调用 //char *ptr = (char *)malloc(sizeof(char) * 128); //ptr = get_passwd(); //printf("\n"); #include<stdio.h> #include<termios.h> #include<unistd.h> #include<assert.h> #include<string.h> #include <stdlib.h> i

linux下c++filter查看函数修饰名

c++函数在linux系统下编译之后会变成类似下面的样子: _ZNK4Json5ValueixEPKc 在linux命令行使用c++filter: [email protected]:~ $ c++filt _ZNK4Json5ValueixEPKc Json::Value::operator[](char const*) const 这样就得到函数的原始名称 如果没有安装c++filter, 可以自行搜索.linux下c++filter查看函数修饰名,布布扣,bubuko.com

Linux Linux下特殊的printf函数

Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算),如果需要不换行的输出,一般可以使用write函数代替.'\n'有清空缓存的作用

Linux 下stat和access函数

1.stat既有命令也有同名函数,用来获取文件Inode里主要信息(即文件类型.文件权限.创建/修改/访问时间等就是ls -l看到的相关的信息),stat 跟踪符号链接,lstat不跟踪符号链接.可以通过man 2 stat查看相关的信息. #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf); int f

我想写一个Linux下的C++程序库--记我的C++库设计历程:设计一个TCP服务程序

我想写一个Linux下的C++程序库,实现一些常用的功能. 我首先想到的就是实现一个TCP监听程序.该程序应该具有哪些功能呢? 1: 启动/停止监听 2: 有客户端连接时,通知调用者 3: 与客户端断开时,通知调用者 4: 有消息到达时,通知调用者 5: 尽量避免程序退出时有没有close的socket. 该程序的大体接口及结构主要用一个类表示,内容如下: #pragma once #include <functional> namespace Hi { /* * @ brief TCP监听会

linux下c程序的链接、装载和库(1)

读完<程序员的自我修养--链接.装载和库>相关章节,想来总结一下,若有错误,请指正,多谢. 1. 什么叫目标文件? 你的工程里有很多xxx.c这样的源文件,这些文件是文本文件,只有人能够认识(当然编译器认识),但是,cpu可不认识.问题就是,真正执行指令的是cpu. 让编译器翻译一下(这里面有很多过程,这不是这篇文章的重点),一般来说,一个xxx.c文件就能翻译成一个xxx.o,这就是目标文件了. 一个源文件就对应一个目标文件,这个目标文件就存储了有关这个源文件的所有信息了,包括在这个源文件里

整理Linux下gcc编译中关于头文件与库文件搜索路径相关问题

分类: MakeFile/Make/GCC/LD2010-11-20 23:15 535人阅读 评论(0) 收藏 举报 转者的话: 本文详细介绍了gcc 编译时 搜索头文件的路径以及方式, 编译时寻找lib库的方式, 以及运行时加载库的寻找方式!!!非常之经典啊!以后有新的知识都汇总到这里来了! 在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方法. 看下文的红色部分. 有大量的环境变量可供设置以影响 G

Linux下经常使用的C/C++开源Socket库

1.      Linux Socket Programming In C++ : http://tldp.org/LDP/LG/issue74/tougher.html 2.      ACE: http://www.cs.wustl.edu/~schmidt/ACE.html ACE採用ACE_OS适配层屏蔽各种不同的.复杂繁琐的操作系统API. ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层.它庞大.复杂.适合大型项目.开源.免费.不依赖第三方库

Linux下c编程rename函数导致的问题

前段时间在部署代码的时候,发现一个比较"诡异"的问题 相同的环境下(CentOs 6.5),开发说在其本机的虚拟机汇总测试是正常的,部署到正式环境中时,就会出现问题.相同的函数,总是执行失败.在另一台测试也是完全正常 开发说是服务器安装的原因,来来回回安装了N次.真TM郁闷 然后又说是权限的问题,包的问题,自己安装,服务器拿回家升级,重买服务器.这个拿回去给他妈用等等等等--我都懒的理他 首先说权限问题,我说跟测试正常的那台机器完全相同,说不行,好吧,给你777 又说是包没安装,我说那