2. 应用编程---获取系统信息与系统资源

获取系统信息与系统资源

  • [1. 获取系统信息---uname() / sysinfo() / gethostname() / sysconf()](#1. 获取系统信息---uname() / sysinfo() / gethostname() / sysconf())
    • [1.1 proc文件系统](#1.1 proc文件系统)
  • [2. 获取系统时间---time() / gettimeofday() / ctime() / ctime_r() / localtime() / localtime_r() / gmtime() / gmtime_r() / mktime() / asctime() / asctime_r() / strftime() / settimeofday()](#2. 获取系统时间---time() / gettimeofday() / ctime() / ctime_r() / localtime() / localtime_r() / gmtime() / gmtime_r() / mktime() / asctime() / asctime_r() / strftime() / settimeofday())
  • [3. 随机数---rand() / srand() / random() / srandom() / initstate() / setstate()](#3. 随机数---rand() / srand() / random() / srandom() / initstate() / setstate())
  • [4. 休眠---sleep() / usleep() / nanosleep()](#4. 休眠---sleep() / usleep() / nanosleep())
  • [5. 堆内存---malloc() / free() / calloc() / posix_memalign() / aligned_alloc() / memalign() / valloc() / pvalloc()](#5. 堆内存---malloc() / free() / calloc() / posix_memalign() / aligned_alloc() / memalign() / valloc() / pvalloc())

1. 获取系统信息---uname() / sysinfo() / gethostname() / sysconf()

c 复制代码
#include <sys/utsname.h>

int uname(struct utsname *buf); 			// 系统调用,用于获取有关当前操作系统内核的名称和信息
int sysinfo(struct sysinfo *info); 			// 系统调用,用于获取一些系统统计信息
int gethostname(char *name, size_t len);	// 系统调用,用于单独获取Linux系统主机名
long sysconf(int name); 					// 系统调用,用于在运行时获取系统的一些配置信息,譬如页大小(page size)、主机名的最大长度、进程可以打开的最大文件数、每个用户ID的最大并发进程数等

1.1

2. 获取系统时间---time() / gettimeofday() / ctime() / ctime_r() / localtime() / localtime_r() / gmtime() / gmtime_r() / mktime() / asctime() / asctime_r() / strftime() / settimeofday()

c 复制代码
#include <time.h> 
#include <sys/time.h>

time_t time(time_t *tloc); 					// 系统调用,用于获取当前时间,以秒为单位(返回得到的值是自1970-01-01 00:00:00 +0000 (UTC)以来的秒数)
int gettimeofday(struct timeval *tv, struct timezone *tz); // 系统调用,用于用于获取当前时间(微秒级时间精度)

char *ctime(const time_t *timep); 				// C库,用于将日历时间转换为可打印输出的字符串形式
char *ctime_r(const time_t *timep, char *buf); 	// C库,用于将日历时间转换为可打印输出的字符串形式
struct tm *localtime(const time_t *timep); 						// C库,用于将日历时间转换为可打印输出的字符串形式(得到的是本地标准时间)
struct tm *localtime_r(const time_t *timep, struct tm *result);	// C库,用于将日历时间转换为可打印输出的字符串形式(得到的是本地标准时间)
struct tm *gmtime(const time_t *timep); 						// C库,用于将日历时间转换为可打印输出的字符串形式(得到的是UTC国际标准时间)
struct tm *gmtime_r(const time_t *timep, struct tm *result); 	// C库,用于将日历时间转换为可打印输出的字符串形式(得到的是UTC国际标准时间)

time_t mktime(struct tm *tm);									// C库,用于将使用struct tm结构体表示的分解时间转换为time_t时间(日历时间)

char *asctime(const struct tm *tm); 			 // C库,用于将时间转换为可打印输出的字符串形式(将struct tm表示的分解时间转换为固定格式的字符串)
char *asctime_r(const struct tm *tm, char *buf); // C库,用于将时间转换为可打印输出的字符串形式(将struct tm表示的分解时间转换为固定格式的字符串)
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);// C库,用于将一个struct tm变量表示的分解时间转换为为格式化字符串(可以根据自己的喜好自定义时间的显示格式)

int settimeofday(const struct timeval *tv, const struct timezone *tz); // 系统调用,用于设置系统的本地时间(只有超级用户(root)才可以设置系统时间)

3. 随机数---rand() / srand() / random() / srandom() / initstate() / setstate()

c 复制代码
#include <stdlib.h> 

int rand(void); 				// C库,用于获取随机数,多次调用 rand() 可得到一组随机数序列
void srand(unsigned int seed);	// C库,用于设置随机数种子(随机数种子相同,每次 rand()  所得到的随机数序列就是一样的)

4. 休眠---sleep() / usleep() / nanosleep()

c 复制代码
#include <unistd.h>

unsigned int sleep(unsigned int seconds);	// C库,用于让程序"休息"一会,然后再继续工作(若被信号中断则返回剩余的秒数)
int usleep(useconds_t usec); 				// C库
int nanosleep(const struct timespec *req, struct timespec *rem); // 系统调用

5. 堆内存---malloc() / free() / calloc() / posix_memalign() / aligned_alloc() / memalign() / valloc() / pvalloc()

c 复制代码
#include <stdlib.h> 
#include <malloc.h> 

void *malloc(size_t size); 	// C库,为程序分配一段堆内存
void free(void *ptr); 		// C库,释放堆内存

void *calloc(size_t nmemb, size_t size); // C库,用来动态地分配内存空间并初始化为0

int posix_memalign(void **memptr, size_t alignment, size_t size); 	// C库,用于在堆上分配size个字节大小的对齐内存空间,将*memptr指向分配的空间,分配的内存地址将是参数alignment的整数倍
void *aligned_alloc(size_t alignment, size_t size);	// C库,用于分配size个字节大小的内存空间,返回指向该空间的指针
void *memalign(size_t alignment, size_t size); 		// C库,用于分配size个字节大小的内存空间,返回指向该空间的指针
void *valloc(size_t size); 	// 系统调用,用于分配size个字节大小的内存空间,返回指向该内存空间的指针,内存空间的地址是页大小(pagesize)的倍数
void *pvalloc(size_t size); // 系统调用,用于分配size个字节大小的内存空间,返回指向该内存空间的指针,内存空间的地址是页大小(pagesize)的倍数

*[proc文件系统]: proc文件系统是一个虚拟文件系统,它以文件系统的方式为应用层访问系统内核数据提供了接口,用户和应用程序可以通过proc文件系统得到系统信息和进程相关信息,对proc文件系统的读写作为与内核进行通信的一种手段。但是与普通文件不同的是,proc文件系统是动态创建的,文件本身并不存在于磁盘当中、只存在于内存当中,与devfs一样,都被称为虚拟文件系统。