获取系统信息与系统资源
- [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一样,都被称为虚拟文件系统。





