统信服务器操作系统【API开发参考手册】

全文导读:本文主要介绍了统信服务器操作系统的API开发参考手册相关内容。

1 接口说明

1.1 assert.h

1.1.1 宏

assert()是一个诊断宏,用于动态辨识程序的逻辑错误条件。其原型是: void assert(int expression);
如果宏的参数求值结果为非零值,则不做任何操作(no action);如果是零值,用宽字符打印诊断消息,然后调用abort()。诊断消息包括:
  • 源文件名字(在stdlib.h中声明的宏__FILE__的值)
  • 所在的源文件的行号(在stdlib.h中声明的宏__LINE__的值)
  • 所在的函数名(在stdlib.h中声明的宏__func__的值)
  • 求值结果为0的表达式
诊断信息的显示目标依赖于被调用程序的类型。如果是控制台程序,诊断信息显示在stderr设备;如果是基于窗口的程序,assert()产生一个Windows MessageBox来显示诊断信息。
程序可以屏蔽掉所有的assert()而无需修改源代码。这只需要在命令行调用C语言的编译器时添加宏定义的命令行选项,定义NDEBUG宏;也可以在源程序程序引入<assert.h>之前就使用#define NDEBUG来定义宏。被屏蔽的assert()甚至不对传递给它的参数表达式求值,因此使用assert()时其参数表达式不能有副作用(side-effects)。

1.2 complex.h

complex.h是C标准函数库中的头文件,提供了复数算术所需要的宏定义与函数声明。

1.2.1 类型

C99C++11都规定了关键字_Complex。因而有3种复数类型:
  • double _Complex
  • float _Complex
  • long double _Complex
次序不是必须遵守的,比如float _Complex也可以写成_Complex float。_Complex_I扩展为类型为const float _Complex的常量值,其值为虚数单位。 C99规定complex作为宏扩展为_Complex。但C++未定义complex宏。 gcc仅支持complex type,不支持imaginary type。因此宏I扩展为_Complex_I。 定义复数变量时,可以如此:
double _Complex v1=3.1+5*I; double _Complex v2=3.2+5*_Complex_I; float _Complex v3=4.6f+12.0IF; //必须先写i,后写f _Complex float v4=8.2f+2.3if; long double _Complex v5=1.23456789L+3.456789999iL; //必须先写i,后写L
也可以用CMPLX/CMPLXF/CMPLXL宏来表示相应复数表达式。

1.3 函数

  • cacos 双精度版本
  • cacosf 单精度版本
  • cacosl 长双精度版本
  • casin 双精度版本
  • casinf 单精度版本
  • casinl 长双精度版本
  • catan 双精度版本
  • catanf 单精度版本
  • catanl 长双精度版本
  • ccos 双精度版本
  • ccosf 单精度版本
  • ccosl 长双精度版本
  • csin 双精度版本
  • csinf 单精度版本
  • csinl 长双精度版本
  • ctan 双精度版本
  • ctanf 单精度版本
  • ctanl 长双精度版本
反双曲余弦
  • cacosh 双精度版本
  • cacoshf 单精度版本
  • cacoshl 长双精度版本
反双曲正弦
  • casinh 双精度版本
  • casinhf 单精度版本
  • casinhl 长双精度版本
反双曲正切
  • catanh 双精度版本
  • catanhf 单精度版本
  • catanhl 长双精度版本
双曲余弦
  • ccosh 双精度版本
  • ccoshf 单精度版本
  • ccoshl 长双精度版本
双曲正弦
  • csinh 双精度版本
  • csinhf 单精度版本
  • csinhl 长双精度版本
双曲正切
  • ctanh 双精度版本
  • ctanhf 单精度版本
  • ctanhl 长双精度版本
指数对数函数
指数
  • cexp 双精度版本
  • cexpf 单精度版本
  • cexpl 长双精度版本
  • clog 双精度版本
  • clogf 单精度版本
  • clogl 长双精度版本
运算和绝对值
绝对值
  • cabs 双精度版本
  • cabsf 单精度版本
  • cabsl 长双精度版本
幂运算
  • cpow 双精度版本
  • cpowf 单精度版本
  • cpowl 长双精度版本
  • csqrt 双精度版本
  • csqrtf 单精度版本
  • csqrtl 长双精度版本
操作
  • carg 双精度版本
  • cargf 单精度版本
  • cargl 长双精度版本
  • cimag 双精度版本
  • cimagf 单精度版本
  • cimagl 长双精度版本
  • cong 双精度版本
  • congf 单精度版本
  • congl 长双精度版本
  • cproj 双精度版本
  • cprojf 单精度版本
  • cprojl 长双精度版本
  • creal 双精度版本
  • crealf 单精度版本
  • creall 长双精度版本

1.4 ctype.h

ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节字符,也支持宽字符

1.4.1 函数

字节字符处理函数在ctype.h(C++的cctype )中声明。宽字节字符处理函数在wctype.h(C++的cwctype)中声明.
单字节 宽字节 描述
isalnum iswalnum 是否为字母数字
isalpha iswalpha 是否为字母
islower iswlower 是否为小写字母
isupper iswupper 是否为大写字母
isdigit iswdigit 是否为数字
isxdigit iswxdigit 是否为16进制数字
iscntrl iswcntrl 是否为控制字符
isgraph iswgraph 是否为图形字符(例如,空格、控制字符都不是)
isspace iswspace 是否为空格字符(包括制表符、回车符、换行符等)
isblank iswblank 是否为空白字符 (C99/C++11新增)(包括水平制表符)
isprint iswprint 是否为可打印字符
ispunct iswpunct 是否为标点
tolower towlower 转换为小写
toupper towupper 转换为大写
不适用 iswctype 检查一个wchar_t是否是属于指定的分类
不适用 towctrans 使用指定的变换映射来转换一个wchar_t(实际上是大小写的转换)
不适用 wctype 返回一个宽字符的类别,用于iswctype函数
不适用 wctrans 返回一个变换映射,用于 towctrans

1.5 errno.h

errno.h是C语言C标准库里的头文件,定义了透过错误码来回报错误信息的宏:
errno宏定义为一个int类型的左值, 包含任何函数使用errno功能所产生的上一个错误码。
一些表示错误码,定义为整数值的宏:
  • EDOM源自函数的参数超出范围,例如sqrt(-1)
  • ERANGE源自函数的结果超出范围,例如strtol("0xfffffffff",NULL,0)
  • EILSEQ源自不合法的字符顺序,例如wcstombs(str, L"\xffff", 2)

1.6 fenv.h

fenv.h是C标准函数库中的头文件,提供了对浮点环境的支持。浮点环境(floating-point environment)是指任何实现支持的浮点状态标志与控制模式。浮点状态标志(floating-point status flag)是一个系统变量,当浮点异常被抛出时该系统变量被置位。浮点控制模式(floating-point control mode)是一个系统变量,用户可以对其置位,以影响随后的浮点运算行为。

1.6.1 类型

fenv_t 表示整体浮点环境
fexcept_t 表示浮点状态的集合

1.6.2 宏

表示各种浮点运算异常:
  • FE_DIVBYZERO
  • FE_INEXACT
  • FE_INVALID
  • FE_OVERFLOW
  • FE_UNDERFLOW
  • FE_ALL_EXCEPT
近似舍入方法
  • FE_DOWNWARD
  • FE_TONEAREST
  • FE_TOWARDZERO
  • FE_UPWARD
缺省浮点环境
  • FE_DFL_ENV

1.6.3 函数

feclearexcept 清除给定的浮点异常
fegetexceptflag 保存一个浮点状态标志到对象中
feraiseexcept 抛出一个浮点异常
fesetexceptflag 设置一个浮点状态标志到对象中
fetestexcept 测试那些浮点异常标志被置位
fegetround 获取当前近似舍入方法
fesetround 设置近似舍入方法
fegetenv 存储当前浮点环境到对象中
feholdexcept 存储当前浮点环境到对象中,清楚浮点状态标志,安装non-stop模式
fesetenv 从对象存储的浮点环境恢复现场
feupdateenv 保存当前浮点异常,从对象存储的浮点环境恢复现场,再重新抛出当前浮点异常

1.7 float.h

1.7.1 宏

双精度浮点类型
  • DBL_DIG 十进制的精度位数:15
  • DBL_EPSILON 保持运算的最小值:2.2204460492503131e-016
  • DBL_MANT_DIG 尾数的位数:53
  • DBL_MAX 最大值:1.7976931348623158e+308
  • DBL_MAX_10_EXP 10进制最大指数值:308
  • DBL_MAX_EXP 2进制最大指数值:1024 (即可以表示到21024这个数量级的值)
  • DBL_MIN 最小的正值:2.2250738585072014e-308
  • DBL_MIN_10_EXP10进制最小指数值: (-307)
  • DBL_MIN_EXP 2进制最小指数值: (-1021)
  • _DBL_RADIX 指数的进制基数: 2
  • _DBL_ROUNDS 额外的舍入方法: 1
单精度浮点类型
  • FLT_DIG 10进制的精度位数 6
  • FLT_EPSILON 保持加法运算的最小值 1.192092896e-07F
  • FLT_GUARD 0
  • FLT_MANT_DIG 尾数的位数: 24
  • FLT_MAX 最大值:3.402823466e+38F
  • FLT_MAX_10_EXP 十进制的最大指数值: 38
  • FLT_MAX_EXP 二进制的最大指数值: 128
  • FLT_MIN 最小正值:1.175494351e-38F
  • FLT_MIN_10_EXP 最小10进制指数值: (-37)
  • FLT_MIN_EXP 最小二进制指数值: (-125)
  • FLT_NORMALIZE 0
  • FLT_RADIX 指数的进制基数: 2
  • FLT_ROUNDS 额外的舍入方法: 1
长双精度浮点类型
均规定为双精度浮点类型的极限值:
  • LDBL_DIG 即DBL_DIG
  • LDBL_EPSILON 即DBL_EPSILON
  • LDBL_MANT_DIG 即DBL_MANT_DIG
  • LDBL_MAX 即DBL_MAX
  • LDBL_MAX_10_EXP 即DBL_MAX_10_EXP
  • LDBL_MAX_EXP 即DBL_MAX_EXP
  • LDBL_MIN 即DBL_MIN
  • LDBL_MIN_10_EXP 即DBL_MIN_10_EXP
  • LDBL_MIN_EXP 即DBL_MIN_EXP
  • _LDBL_RADIX 即DBL_RADIX
  • _LDBL_ROUNDS 即DBL_ROUNDS

1.8 inttypes.h

inttypes.h是C标准函数库中的头文件,提供了各种位宽的整数类型输入输出时的转换标志宏。

1.8.1 宏

下述定义的宏用于stdint.h中定义的各种位宽的整形在格式化输入/输出时的格式标志。
前3个字符:
  • PRI 用于printf format
  • SCN 用于scanf format
第4个字符
  • x 用于hexadecimal formatting
  • u 用于unsigned formatting
  • o 用于octal formatting
  • i 用于integer formatting
  • d 用于decimal formatting
其他字符
  • 8 用于eight bit
  • 16 用于sixteen bit
  • 32 用于thirty-two bit
  • 64 用于sixty-four bit
  • FAST8 用于"fast" eight bit
  • FAST16 用于"fast" sixteen bit
  • FAST32 用于"fast" thirty-two bit
  • FAST64 用于"fast" sixty-four bit
  • LEAST8 用于"least" eight bit
  • LEAST16 用于"least" sixteen bit
  • LEAST32 用于"least" thirty-two bit
  • LEAST64 用于"least" sixty-four bit
  • PTR 用于指针
  • MAX 用于maximum supported bit size

1.8.2 类型

imaxdiv_t 结构化类型,用于保存函数imaxdiv返回的除商与余数。

1.8.3 函数

imaxabs 计算绝对值
imaxdiv 计算商与余数
strtoimax 字符串转换为整数
strtoumax 字符串转换为无符号整数
wstrtoimax 宽字符串转换为整数
wstrtoumax 宽字符串转换为无符号整数

1.9 limits.h

limits.h是C标准函数库中的头文件,定义了整数类型的一些极限值。

1.9.1 宏

以下常量以32位电脑的常见数值为例,根据不同硬件操作系统编译器可能会有不同的常量值定义。
CHAR_BIT 字节的最小位数:8
SCHAR_MIN 有符号字符类型的最小值:-128
SCHAR_MAX 有符号字符类型的最大值:+127
UCHAR_MAX 无符号字符类型的最大值:255
CHAR_MIN 字符类型的最小值
CHAR_MAX 字符类型的最大值
MB_LEN_MAX 多字节字符在任何locale中可能的最长字节数:4/5/8/16
SHRT_MIN 短整型最小值:-32768,即- 215
SHRT_MAX 短整型最大值:+32767,即 215 - 1
USHRT_MAX 无符号短整型最大值:65535 ,即 216 - 1
INT_MIN 整型最小值:-2147483648,即 -(231)
INT_MAX 整型最大值:+2147483647 ,即231 - 1
UINT_MAX 无符号整型最大值:4294967295,即232 - 1
LONG_MIN 长整型最小值:-2147483648 ,即-(231 )
LONG_MAX 长整型最大值:+2147483647 ,即231 - 1
ULONG_MAX 无符号长整型最大值:4294967295 ,即232 - 1
LLONG_MIN 长长整型最小值:-9223372036854775808 ,即-(263 )
LLONG_MAX 长长整型最大值:+9223372036854775807 ,即263 - 1
ULLONG_MAX 无符号长长整型最大值:18446744073709551615 ,即264- 1

1.10 Locale.h

locale.h是C程序设计语言标准函数库的一个头文件,声明了C语言本地化函数。这些函数用于在处理多种自然语言的软件编程设计时,把程序调整到特定的区域设置. 这些区域设置影响到C语言标准库的输入/输出函数.

1.10.1 函数

Function Description
setlocale 设置与读取当前C locale
localeconv 返回当前locale的货币与数值的格式细节

1.11 math.h

math.h是C标准函数库中的头文件(标头档)。提供用于常用高级数学运算的运算函数。

1.11.1 函数

函数原型 描述
double sin(double); 正弦
double cos(double); 余弦
double tan(double); 正切
double asin(double); 反正弦,结果介于 [ − π 2 , π 2 ]
double acos(double) 反余弦,结果介于 [ 0 , π ]
double atan(double); 反正切(主值),结果介于 [ − π 2 , π 2 ]
double atan2(double, double); 反正切(整圆值),结果介于 [ − π , π ]
double sinh(double); 双曲正弦
double cosh(double); 双曲余弦
double tanh(double); 双曲正切
double exp(double); 指数函数
double sqrt(double); 开平方根
double log(double); 自然对数
double log10(double); 常用对数
double pow(double, double); 计算 x y
float powf(float, float); 功能等同于 pow(),只是输入参数与输出参数皆为单浮点数
double ceil(double); 上取整
double floor(double); 下取整
int abs(int); 求整型的绝对值
double fabs(double); 求绝对值
double cabs(struct complex); 求复数的绝对值
double frexp(double f, int *p); 标准化浮点数
double ldexp(double x, int p); 与 frexp() 相反
double modf(double, double *); 将参数的整数部分通过指针回传,返回小数部分
double fmod(double, double); 返回两参数相除的余数
double hypot(double, double); 已知直角三角形两个直角边长度,求斜边长度
double ldexp(double x, int exponent); 计算 x ∗ 2 exponent
double poly(double x, int degree, double coeffs [] ); 计算多项式
int matherr(struct exception *); 数学错误计算处理程序

1.12 setjmp.h

setjmp.h是C标准函数库中提供“非本地跳转”的头文件:控制流偏离了通常的子程序调用与返回序列。互补的两个函数setjmp与longjmp提供了这种功能。
setjmp/longjmp的典型用途是异常处理机制的实现:利用longjmp恢复程序或线程的状态,甚至可以跳过栈中多层的函数调用。

1.12.1 函数

1.13 signal.h

signal.h是C标准函数库中的信号处理部分, 定义了程序执行时如何处理不同的信号。信号用作进程间通信, 报告异常行为(如除零)、用户的一些按键组合(如同时按下Ctrl与C键,产生信号SIGINT)。

1.13.1 信号

C语言标准定义了6个信号。都定义在signal.h头文件中[1]
  • SIGABRT - 异常中止。
  • SIGFPE - 浮点异常。
  • SIGILL - 无效指令。
  • SIGINT - 交互的用户按键请求,默认情况下,这会导致进程终止。
  • SIGSEGV - 无效内存访问。
  • SIGTERM - 程序的中止请求。
signal.h可能还定义了其它信号,这依赖于具体实现。例如,类Unix系统还定义了15个以上的信号[2]Visual C++的C标准库只支持C语言标准规定的6个信号,即对信号处理只提供最小的支持。

1.13.2 函数

函数 描述
raise 人工抛出一个信号
signal 当程序收到特定信号时应该执行的处理函数

1.14 stdalign.h

stdalign.h是C语言标准2011版新增加的C标准函数库头文件,为向后兼容目的定义了4个宏:
  • alignas 被扩展为_Alignas,_Alignas为C11的关键字。
  • alignof 被扩展为_Alignof,_Alignof为C11的关键字。
  • __alignas_is_defined 被扩展为1
  • __alignof_is_defined 被扩展为1
在C++11中,alignas与alignof是关键字。alignas用于变量定义、数据成员声明、class\struct\union的声明与定义。alignas不可用于基本类型的别名、数组类型等。alignas只能用于更严格(更大对齐值)。alignas的参数可以为数、类型。

1.15 string.h

string.h是C标准库头文件,其中包含了(宏)定义、常量以及函数和类型的声明,涉及的内容除了字符串处理之外,还包括大量的内存处理函数;

1.15.1 常量和类型

名称 说明
NULL 表示空指针常量的宏,即表示一个不指向任何有效内存单元地址的指针常量。
size_t 无符号整型,被用于sizeof运算符的返回值类型。

1.15.2 函数

名称 说明
void *memcpy(void *dest, const void *src, size_t n); 将n字节长的内容从一个内存地址复制到另一个地址;如果两个地址存在重叠,则最终行为未定义
void *memmove(void *dest, const void *src, size_t n); 将n字节长的内容从一个内存地址复制到另一个地址;与memcpy不同的是它可以正确作用于两个存在重叠的地址
void *memchr(const void *s, char c, size_t n); 在从s开始的n个字节内查找c第一次出现的地址并返回,若未找到则返回NULL
int memcmp(const void *s1, const void *s2, size_t n); 对从两个内存地址开始的n个字符进行比较
void *memset(void *, int, size_t); 用某种字节内容覆写一段内存空间
char *strcat(char *dest, const char *src); 在字符串dest之后连接上src
char *strncat(char *dest, const char *src, size_t n); 从src截取n个字符连接在字符串dest之后,返回dest字符串
char *strchr(const char* str, int ch); 从字符串str头开始查找字符ch首次出现的位置
char *strrchr(const char* str,int ch); 从字符串str尾开始查找字符ch首次出现的位置
int strcmp(const char *, const char *); 基于字典顺序比较两个字符串
int strncmp(const char *, const char *, size_t n); 基于字典顺序比较两个字符串,最多比较n个字节
int strcoll(const char *, const char *); 基于当前区域设置的字符顺序比较两个字符串
char *strcpy(char* str1, const char* str2); 将str2拷贝给str1
char *strncpy(char* str1, const char* str2, size_t n); 截取str2的n个字符拷贝给str1
char *strerror(int); 返回错误码对应的解释字符串,参见errno.h(非线程安全函数)
size_t strlen(const char *); 返回一个字符串的长度
size_t strspn(const char *s, const char *strCharSet); 从字符串s的起始处开始,寻找第一个不出现在strCharSet中的字符,返回其位置索引值。换句话说,返回从字符串s的起始位置的完全由strCharSet中的字符构成的子串的最大长度。strspn为string span的缩写。不支持多字节字符集。
size_t strcspn(const char *s, const char *strCharSet); 从字符串s的起始处开始,寻找第一个出现在strCharSet中的字符,返回其位置索引值。换句话说,返回从字符串s的起始位置的完全由不属于strCharSet中的字符构成的子串的最大长度。strcspn为string complement span的缩写。不支持多字节字符集。
char *strpbrk(const char *s, const char *breakset); 在字符串s中查找breakset中任意字符第一次出现的位置的指针值。strpbrk为string pointer break缩写。通常,breakset是分隔符的集合。不支持多字节字符集。
char *strstr(const char *haystack, const char *needle); 在字符串haystack中查找字符串needle第一次出现的位置,heystack的长度必须长于needle
char *strtok(char *strToken, const char *strDelimit ); 将一个字符串strToken依据分界符(delimiter)分隔成一系列字符串。此函数非线程安全,且不可重入;但MSVC实现时使用了thread-local static variable因而是线程安全的但仍然是不可重入,即在单线程中不能对两个源字符串交替调用该函数来分析token,应当对一个字符串分析完成后再处理别的字符串。
size_t strxfrm(char *dest, const char *src, size_t n); 根据当前locale转换一个字符串为strcmp使用的内部格式
名称 说明
void *memcpy(void *dest, const void *src, size_t n); 将n字节长的内容从一个内存地址复制到另一个地址;如果两个地址存在重叠,则最终行为未定义
void *memmove(void *dest, const void *src, size_t n); 将n字节长的内容从一个内存地址复制到另一个地址;与memcpy不同的是它可以正确作用于两个存在重叠的地址
void *memchr(const void *s, char c, size_t n); 在从s开始的n个字节内查找c第一次出现的地址并返回,若未找到则返回NULL
int memcmp(const void *s1, const void *s2, size_t n); 对从两个内存地址开始的n个字符进行比较
void *memset(void *, int, size_t); 用某种字节内容覆写一段内存空间
char *strcat(char *dest, const char *src); 在字符串dest之后连接上src
char *strncat(char *dest, const char *src, size_t n); 从src截取n个字符连接在字符串dest之后,返回dest字符串
char *strchr(const char* str, int ch); 从字符串str头开始查找字符ch首次出现的位置
char *strrchr(const char* str,int ch); 从字符串str尾开始查找字符ch首次出现的位置
int strcmp(const char *, const char *); 基于字典顺序比较两个字符串
int strncmp(const char *, const char *, size_t n); 基于字典顺序比较两个字符串,最多比较n个字节
int strcoll(const char *, const char *); 基于当前区域设置的字符顺序比较两个字符串
char *strcpy(char* str1, const char* str2); 将str2拷贝给str1
char *strncpy(char* str1, const char* str2, size_t n); 截取str2的n个字符拷贝给str1
char *strerror(int); 返回错误码对应的解释字符串,参见errno.h(非线程安全函数)
size_t strlen(const char *); 返回一个字符串的长度
size_t strspn(const char *s, const char *strCharSet); 从字符串s的起始处开始,寻找第一个不出现在strCharSet中的字符,返回其位置索引值。换句话说,返回从字符串s的起始位置的完全由strCharSet中的字符构成的子串的最大长度。strspn为string span的缩写。不支持多字节字符集。
size_t strcspn(const char *s, const char *strCharSet); 从字符串s的起始处开始,寻找第一个出现在strCharSet中的字符,返回其位置索引值。换句话说,返回从字符串s的起始位置的完全由不属于strCharSet中的字符构成的子串的最大长度。strcspn为string complement span的缩写。不支持多字节字符集。
char *strpbrk(const char *s, const char *breakset); 在字符串s中查找breakset中任意字符第一次出现的位置的指针值。strpbrk为string pointer break缩写。通常,breakset是分隔符的集合。不支持多字节字符集。
char *strstr(const char *haystack, const char *needle); 在字符串haystack中查找字符串needle第一次出现的位置,heystack的长度必须长于needle
char *strtok(char *strToken, const char *strDelimit ); 将一个字符串strToken依据分界符(delimiter)分隔成一系列字符串。此函数非线程安全,且不可重入;但MSVC实现时使用了thread-local static variable因而是线程安全的但仍然是不可重入,即在单线程中不能对两个源字符串交替调用该函数来分析token,应当对一个字符串分析完成后再处理别的字符串。
size_t strxfrm(char *dest, const char *src, size_t n); 根据当前locale转换一个字符串为strcmp使用的内部格式

1.16 tgmath.h

tgmath.h是C标准函数库中的头文件,提供了数学函数的类型通用的宏定义。使用这些宏调用数学函数时,会根据参数自动对应到类型适合的数学函数,其效果类似于C++函数重载,使得编程者不必繁琐地去调用数学库函数的单精度、双精度、长双精度、单精度复数、双精度复数、长双精度复数等各个版本。

1.16.1 宏

1.16.2 math.h与complex.h共有

一些常见数学函数既在math.h有实数版本,也在complex.h有复数版本。tgmath.h提供了下述类型通用的宏定义:
acos、asin、atan、acosh、asinh、atanh、cos、sin、tan、cosh、sinh、tanh、exp、log、pow、sqrt、fabs
math.h专用
对于包含在math.h中,但在complex.h中没有对应的函数,提供了下述通用类型的宏:
atan2、cbrt、ceil、copysign、erf、erfc、exp2、expm1、fdim、floor、fma、fmax、fmin、fmod、frexp、hypot、ilogb、ldexp、lgamma、llrint、llround、log10、log1p、log2、logb、lrint、lround、nearbyint、nextafter、nexttoward、remainder、remquo、rint、round、scalbn、scalbln、tgamma、trunc
complex.h专用
对于包含在complex.h中,但在math.h中没有对应的函数,提供了下述通用类型的宏:
carg、cimag、conj、cproj、creal

1.17 time.h

time.h是C标准函数库中获取时间与日期、对时间与日期数据操作及格式化的头文件

1.17.1 数据类型

日历时间(Calendar Time),是从一个标准时间点(epoch)到现在的时间经过的秒数,不包括插入闰秒对时间的调整。开始计时的标准时间点,各种编译器一般使用UTC 1970-01-01 00:00:00。日历时间用数据类型time_t表示。[1]:20time_t类型实际上一般是32位整数类型,因此表示的时间不能晚于UTC 2038-01-18 19:14:07。为此,某些编译器引入了64位甚至更长的整型来保存日历时间,如Visual C++支持__time64_t数据类型,通过_time64()函数获取日历时间,可支持到UTC 3001-01-01 00:00:00的时间。
处理器时间(Processor Time),也被称为CPU时间(CPU Time),用以度量进程使用的CPU资源。处理器时间以时钟滴答数(Clock Tick)计算,通常从进程启动开始计时,因此这是相对时间。时钟滴答数用系统基本数据类型clock_t来表示,每秒钟包含CLOCKS_PER_SEC(time.h中定义的常量,一般为1000)个时钟滴答,也可使用sysconf函数得到每秒的时钟滴答数。clock_t类型一般是32位整数类型。[1]:20
分解时间(broken-down time),用结构数据类型tm表示,tm包含下列结构成员:
成员 描述
int tm_hour 小时 (0 – 23)
int tm_isdst 夏令时启用 (> 0)、禁用 (= 0)、未知 (< 0)
int tm_mday 一月中的哪一天 (1 – 31)
int tm_min 分 (0 – 59)
int tm_mon 月 (0 – 11, 0 = 一月)
int tm_sec 秒 (0 – 60, 60 = 闰秒)
int tm_wday 一周中的哪一天 (0 – 6, 0 = 周日)
int tm_yday 一年中的哪一天 (0 – 365)
int tm_year 1900 以来的年数

1.17.2 函数

time_t time(time_t* timer)
得到从标准计时点(一般是UTC 1970年1月1日午夜)到当前时间的秒数。
clock_t clock(void)
得到从进程启动到此次函数调用的累计的时钟滴答数。
struct tm* gmtime(const time_t* timer)
从日历时间time_t到分解时间tm(世界协调时UTC)的转换。函数返回的是一个静态分配的tm结构存储空间,该存储空间被gmtime, localtime与ctime函数所共享. 这些函数的每一次调用会覆盖这块tm结构存储空间的内容。
struct tm* gmtime_r(const time_t* timer, struct tm* result)
该函数是gmtime函数的线程安全版本.
struct tm* localtime(const time_t* timer)
从日历时间time_t到分解时间tm的转换,即结果数据已经调整到本地时区与夏令时。
time_t mktime(struct tm* ptm)
从基于本地时区(与夏令时)的分解时间tm到日历时间time_t的转换。忽略tm_wday与tm_yday的输入值。如果tm_isdst不确定则输入设为-1。其它各输入域的值可以任意设定,输出时被规范化到正确范围。例如,想要计算2012年的第200天的日期,设为1月200日,函数会输出正确的结果
time_t timegm(struct tm* brokentime)
从分解时间tm(被视作UTC时间,不考虑本地时区设置)到日历时间time_t的转换。该函数较少被使用。
char *asctime(const struct tm* tmptr)
把分解时间tm输出到字符串,结果的格式为"Www Mmm dd hh:mm:ss yyyy",即“周几 月份数 日数 小时数:分钟数:秒钟数 年份数”。函数返回的字符串为静态分配,长度不大于26,与ctime函数共享。函数的每次调用将覆盖该字符串内容。
char* ctime(const time_t* timer)
把日历时间time_t timer输出到字符串,输出格式与asctime函数一样.
size_t strftime(char* s, size_t n, const char* format, const struct tm* tptr)
把分解时间tm转换为自定义格式的字符串,类似于常见的字符串格式输出函数sprintf。例如:strftime(buf, 64, "%Y-%m-%d %H:%M:%S", localtime);
char * strptime(const char* buf, const char* format, struct tm* tptr)
strftime的逆操作,把字符串按照自定义的格式转换为分解时间tm。
double difftime(time_t timer2, time_t timer1)
比较两个日历时间之差。

1.18 ctype.h

ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等。既支持单字节字符,也支持宽字符

1.18.1 函数

单字节字符处理函数在ctype.h(C++的cctype )中声明。宽字节字符处理函数在wctype.h(C++的cwctype)中声明.
单字节 宽字节 描述
isalnum iswalnum 是否为字母数字
isalpha iswalpha 是否为字母
islower iswlower 是否为小写字母
isupper iswupper 是否为大写字母
isdigit iswdigit 是否为数字
isxdigit iswxdigit 是否为16进制数字
iscntrl iswcntrl 是否为控制字符
isgraph iswgraph 是否为图形字符(例如,空格、控制字符都不是)
isspace iswspace 是否为空格字符(包括制表符、回车符、换行符等)
isblank iswblank 是否为空白字符 (C99/C++11新增)(包括水平制表符)
isprint iswprint 是否为可打印字符
ispunct iswpunct 是否为标点
tolower towlower 转换为小写
toupper towupper 转换为大写
不适用 iswctype 检查一个wchar_t是否是属于指定的分类
不适用 towctrans 使用指定的变换映射来转换一个wchar_t(实际上是大小写的转换)
不适用 wctype 返回一个宽字符的类别,用于iswctype函数
不适用 wctrans 返回一个变换映射,用于 towctrans

©统信软件技术有限公司。访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本网站任何内容或服务进行转载,须备注:该文档出自【faq.uniontech.com】统信软件知识分享平台。否则统信软件将追究相关版权责任。

2023-10-31
0 0