引言
上篇博文我们了解了 @EnableAutoConfiguration 注解,其中真正实现自动配置功能的核心实现者 AutoConfigurationImportSelector
还没有详细说明,本篇将从它的源码入手来重点介绍。
上篇博文我们了解了 @EnableAutoConfiguration 注解,其中真正实现自动配置功能的核心实现者 AutoConfigurationImportSelector
还没有详细说明,本篇将从它的源码入手来重点介绍。
在 Huazie 的上篇博文中,我们详细了解了关于 @SpringBootApplication 注解的一些内容,文章最后提到了 @EnableAutoConfiguration
注解,用来开启 Spring Boot
的自动配置功能,这将是本篇将要重点讲解的内容。
在 Huazie 前面的博文 《Spring Boot 核心运行原理介绍》中,我们初步了解了 Spring Boot
核心运行原理,知道了 @EnableAutoConfiguration
是用来开启自动配置的注解。但创建过 Spring Boot 项目的读者肯定会说,我们并没有直接看到这个注解,实际上前面我也提到,它是由组合注解 @SpringBootApplication
引入的。
上篇介绍了 ThreadPoolExecutor
配置和扩展相关的信息,本篇开始将介绍递归算法的并行化。
还记得我们在《Java并发编程学习11-任务执行演示》中,对页面绘制程序进行一系列改进,这些改进大大地提供了页面绘制的并行性。
函数声明 | 函数功能 |
---|---|
char *gcvt(double value, int ndigit, char *buf); |
把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数。 |
void getarccoords(struct arccoordstype *arccoords); |
取最后一次调用arc的坐标 |
int getbkcolor(void); |
获取当前背景颜色 |
int getc(FILE *stream); |
从流中取字符 |
int getchar(void); |
从 stdin 流中读字符 |
int getcolor(void); |
当前画线的颜色 |
char *getcwd(char *buffer, int maxlen); |
获取当前工作目录 |
struct palettetype* getdefaultpalette(void); |
获取调色板定义结构 |
char *getdrivename(void); |
获取当前图形驱动程序名字 |
void getfillpattern(char *upattern); |
将用户定义的填充模式拷贝到内存中 |
void getfillsettings(struct fillsettingstype *fillinfo); |
获取有关当前填充模式和填充颜色的信息 |
int getgraphmode(void); |
获取当前图形模式 |
void getimage(int left, int top, int right, int bottom, void *bitmap); |
保存指定区域的屏幕上的像素图形到指定的内存区域 |
void getlinesettings(struct linesettingstype *lininfo); |
取当前线型、模式和宽度 |
int getmaxcolor(void); |
可以传给函数 setcolor 的最大颜色值 |
int getmaxx(void); |
屏幕的最大x坐标 |
int getmaxy(void); |
屏幕的最大y坐标 |
函数声明 | 函数功能 |
---|---|
char *gcvt(double value, int ndigit, char *buf); |
把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数。 |
参数:
value: 被转换的值。
ndigit: 存储的有效数字位数。
buf: 结果的存储位置。
注意: gcvt 函数把一个浮点值转换成一个字符串 (包括一个小数点和可能的符号字节) 并存储该字符串在 buffer 中。该 buffer 应足够大以便容纳转换的值加上结尾的 结束符
'\0'
,它是自动添加的。
如果一个缓冲区的大小为 ndigit + 1,则 gcvt 函数将覆盖该缓冲区的末尾。这是因为转换的字符串包括一个小数点以及可能包含符号和指数信息。
1 |
|
函数声明 | 函数功能 |
---|---|
void getarccoords(struct arccoordstype *arccoords); |
取最后一次调用arc的坐标 |
1 |
|
上述代码是一个简单的图形程序,使用了图形库函数 arc
来绘制一个弧线并显示其起始和结束点的坐标。
大致逻辑如下:
(midx, midy)
。45
度,结束角度为 270
度,半径为 100
像素。arc
函数时的坐标信息,并将其存储在 arcinfo
结构体中。sprintf
函数将起始点和结束点的坐标格式化为字符串。函数声明 | 函数功能 |
---|---|
int getbkcolor(void); |
获取当前背景颜色 |
颜色值 | 英文枚举 | 中文描述 |
---|---|---|
0 | BLACK | 黑 |
1 | BLUE | 蓝 |
2 | GREEN | 绿 |
3 | CYAN | 青 |
4 | RED | 红 |
5 | MAGENTA | 洋红 |
6 | BROWN | 棕 |
7 | LIGHTGRAY | 淡灰 |
8 | DARKGRAY | 深灰 |
9 | LIGHTBLUE | 淡兰 |
10 | LIGHTGREEN | 淡绿 |
11 | LIGHTCYAN | 淡青 |
12 | LIGHTRED | 淡红 |
13 | LIGHTMAGENTA | 淡洋红 |
14 | YELLOW | 黄 |
15 | WHITE | 白 |
1 |
|
上述也是一个简单的图形程序,通过使用图形库来绘制背景颜色变化。
下面来简单总结下:
(midx, midy)
。i
所代表的颜色。bkcolor
数组中。bkname
字符串中。函数声明 | 函数功能 |
---|---|
int getc(FILE *stream); |
从流中取字符 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getchar(void); |
从 stdin 流中读字符 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getcolor(void); |
当前画线的颜色 |
颜色值 | 英文枚举 | 中文描述 |
---|---|---|
0 | BLACK | 黑 |
1 | BLUE | 蓝 |
2 | GREEN | 绿 |
3 | CYAN | 青 |
4 | RED | 红 |
5 | MAGENTA | 洋红 |
6 | BROWN | 棕 |
7 | LIGHTGRAY | 淡灰 |
8 | DARKGRAY | 深灰 |
9 | LIGHTBLUE | 淡兰 |
10 | LIGHTGREEN | 淡绿 |
11 | LIGHTCYAN | 淡青 |
12 | LIGHTRED | 淡红 |
13 | LIGHTMAGENTA | 淡洋红 |
14 | YELLOW | 黄 |
15 | WHITE | 白 |
1 |
|
上述程序,通过使用图形库,在一个循环中遍历所有颜色,每次在屏幕中心显示当前颜色的名称和值,等待用户按键后更改颜色并清除屏幕,直到所有颜色展示完毕。
函数声明 | 函数功能 |
---|---|
char *getcwd(char *buffer, int maxlen); |
获取当前工作目录 |
注意:getcwd 函数是将当前工作目录的绝对路径复制到参数 buffer 所指的内存空间中,参数 maxlen 为 buffer 的空间大小。
1 |
|
函数声明 | 函数功能 |
---|---|
struct palettetype* getdefaultpalette(void); |
获取调色板定义结构 |
1 |
|
函数声明 | 函数功能 |
---|---|
char *getdrivename(void); |
获取当前图形驱动程序名字 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getfillpattern(char *upattern); |
将用户定义的填充模式拷贝到内存中 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getfillsettings(struct fillsettingstype *fillinfo); |
获取有关当前填充模式和填充颜色的信息 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getgraphmode(void); |
获取当前图形模式 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getimage(int left, int top, int right, int bottom, void *bitmap); |
保存指定区域的屏幕上的像素图形到指定的内存区域 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getlinesettings(struct linesettingstype *lininfo); |
取当前线型、模式和宽度 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getmaxcolor(void); |
可以传给函数 setcolor 的最大颜色值 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getmaxx(void); |
屏幕的最大x坐标 |
int getmaxy(void); |
屏幕的最大y坐标 |
1 |
|
函数声明 | 函数功能 |
---|---|
double floor (double x); |
获取小于或等于 x 的最大整数(double)。 |
float floorf (float x); |
获取小于或等于 x 的最大整数(float)。 |
long double floorl (long double x) |
获取小于或等于 x 的最大整数(long double)。 |
int _flushall(void); |
清除所有缓冲区,返回打开的流(输入和输出)的数量 |
double fma (double x, double y, double z); |
计算x*y+z的值,并将结果四舍五入(double)。 |
float fmaf (float x, float y, float z ); |
计算x*y+z的值,并将结果四舍五入(float )。 |
long double fmal (long double x, long double y, long double z); |
计算x*y+z的值,并将结果四舍五入(double)。 |
double fmax (double x, double y); |
获取 x 和 y 中的最大值(double) |
float fmaxf (float x, float y); |
获取 x 和 y 中的最大值(float) |
long double fmaxl (long double x, long double y); |
获取 x 和 y 中的最大值(long double) |
double fmin (double x, double y); |
获取 x 和 y 中的最小值(double) |
float fminf (float x, float y); |
获取 x 和 y 中的最小值(float) |
long double fminl (long double x, long double y); |
获取 x 和 y 中的最小值(long double) |
double fmod (double x, double y); |
计算 x 除以 y 的余数(double)。 |
float fmodf (float x, float y); |
计算 x 除以 y 的余数(float)。 |
long double fmodl (long double x, long double y); |
计算 x 除以 y 的余数(long double)。 |
FILE *fopen(const char *filename, const char *mode); |
使用给定的模式mode打开filename所指向的文件。 |
int fprintf(FILE *stream, char *format[, argument,...]); |
格式化输出到一个流文件中 |
int fputc(int ch, FILE *stream); |
将字符【ch为字符的ascii码】写到文件指针stream所指向的文件的当前写指针的位置 |
int fputchar(char ch); |
送一个字符到标准输出流(stdout)中,出错则返回EOF |
int fputs(const char *str, FILE *stream); |
把字符串写入到指定的流( stream) 中,但不包括空字符。 |
int fread(void *buffer, int size, int count, FILE *stream); |
从给定输入流stream读取最多count个对象到数组buffer中 |
void free(void *ptr); |
释放ptr指向的存储空间 |
FILE * freopen(const char *filename, const char *mode, FILE *stream); |
以指定模式重新指定到另一个文件 |
double frexp (double x, int * exp); |
将x 分解为有效位 和 2 的整数指数。(double)。 |
float frexpf (float x, int * exp); |
将x 分解为有效位 和 2 的整数指数。(float)。 |
long double frexpl (long double x, int * exp); |
将x 分解为有效位 和 2 的整数指数。(long double)。 |
int fscanf(FILE *stream, char *format[,argument...]); |
从一个流中执行格式化输入 |
int fseek(FILE *stream, long offset, int fromwhere); |
重定位流上的文件指针位置 |
int fsetpos(FILE *stream, const fpos_t *pos); |
将文件指针定位在pos指定的位置上。如果成功返回0,否则返回非0。 |
int fstat(int handle,struct stat *buf); |
由文件描述符获取文件状态 |
long ftell(FILE *stream); |
获取文件指针当前位置相对于文件首的偏移字节数 |
int fwrite(const void *ptr, int size, int nitems, FILE *stream); |
把ptr所指向的数组中的数据写入到给定流stream中 |
函数声明 | 函数功能 |
---|---|
double floor (double x); |
获取小于或等于 x 的最大整数(double)。 |
float floorf (float x); |
获取小于或等于 x 的最大整数(float)。 |
long double floorl (long double x) |
获取小于或等于 x 的最大整数(long double)。 |
1 |
|
函数声明 | 函数功能 |
---|---|
int _flushall(void); |
清除所有缓冲区,返回打开的流(输入和输出)的数量 |
1 |
|
函数声明 | 函数功能 |
---|---|
double fma (double x, double y, double z); |
计算x*y+z的值,并将结果四舍五入(double)。 |
float fmaf (float x, float y, float z ); |
计算x*y+z的值,并将结果四舍五入(float )。 |
long double fmal (long double x, long double y, long double z); |
计算x*y+z的值,并将结果四舍五入(double)。 |
1 |
|
函数声明 | 函数功能 |
---|---|
double fmax (double x, double y); |
获取 x 和 y 中的最大值(double) |
float fmaxf (float x, float y); |
获取 x 和 y 中的最大值(float) |
long double fmaxl (long double x, long double y); |
获取 x 和 y 中的最大值(long double) |
1 |
|
函数声明 | 函数功能 |
---|---|
double fmin (double x, double y); |
获取 x 和 y 中的最小值(double) |
float fminf (float x, float y); |
获取 x 和 y 中的最小值(float) |
long double fminl (long double x, long double y); |
获取 x 和 y 中的最小值(long double) |
1 |
|
函数声明 | 函数功能 |
---|---|
double fmod (double x, double y); |
计算 x 除以 y 的余数(double)。 |
float fmodf (float x, float y); |
计算 x 除以 y 的余数(float)。 |
long double fmodl (long double x, long double y); |
计算 x 除以 y 的余数(long double)。 |
1 |
|
函数声明 | 函数功能 |
---|---|
FILE *fopen(const char *filename, const char *mode); |
使用给定的模式mode打开filename所指向的文件。 |
参数:
返回值:
如果文件顺利打开后,指向该流的文件指针就会被返回;否则文件打开失败则返回 NULL,并把错误代码存在 error 中。
文件访问模式
文件访问模式 | 说明 |
---|---|
"r" |
以只读模式打开文件,该文件必须存在。 |
"w" |
以只写模式打开文件。若文件不存在则创建该文件。若文件存在则其现有内容将被清除。 |
"a" |
以追加模式打开只写文件。若文件不存在则创建该文件;如果文件存在,则新写入的数据会被加到文件尾后。 |
"r+" |
以读写模式打开文件,该文件必须存在。 |
"w+" |
以读写模式打开文件。若文件不存在则创建该文件。若文件存在则其内容将被清除。 |
"a+" |
以追加模式打开可读写文件。若文件不存在则创建该文件;如果文件存在,则新写入的数据会被加到文件尾后。 |
"rb" |
以只读模式打开一个二进制文件。 |
"wb" |
以只写模式打开或新建一个二进制文件。 |
"ab" |
以追加模式打开一个二进制文件,并在文件末尾写入数据。 |
"rb+" |
以读写模式打开一个二进制文件,该文件必须存在。 |
"wb+" |
以读写模式打开或创建一个二进制文件。 |
"ab+" |
以追加模式打开一个二进制文件,以便在文件末尾写入数据。该文件也是可读的。 |
"rt" |
以只读模式打开一个文本文件。 |
"wt" |
以只读模式打开或创建文本文件。 |
"at" |
以追加模式打开一个文本文件,并在文件末尾写入数据。 |
"rt+" |
以读写模式打开一个文本文件。 |
"wt+" |
以读写模式打开或创建文本文件。 |
"at+" |
以追加模式打开文本文件,以便在文件末尾写入数据。该文件也是可读的。 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fprintf(FILE *stream, char *format[, argument,...]); |
格式化输出到一个流文件中 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fputc(int ch, FILE *stream); |
将字符【ch为字符的ascii码】写到文件指针stream所指向的文件的当前写指针的位置 |
注意: 在正常调用情况下,函数返回写入文件的字符的 ASCII 码值,出错时,返回 EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。
1 |
|
函数声明 | 函数功能 |
---|---|
int fputchar(char ch); |
送一个字符到标准输出流(stdout)中,出错则返回EOF |
1 |
|
函数声明 | 函数功能 |
---|---|
int fputs(const char *str, FILE *stream); |
把字符串写入到指定的流( stream) 中,但不包括空字符。 |
注意: fputs 函数如果成功则返回 0,如果发生错误则返回 EOF(-1)
1 |
|
函数声明 | 函数功能 |
---|---|
int fread(void *buffer, int size, int count, FILE *stream); |
从给定输入流stream读取最多count个对象到数组buffer中 |
参数:
返回值:
返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。
若 size 或 count 为零,则 fread 返回零且不进行其他动作。
fread 不区分文件尾和错误,因此调用者必须用 feof 和 ferror 才能判断发生了什么。
注意: 如果读取成功,流的文件位置指示器前进读取的字节数;否则出现错误,则流的文件位置指示器的位置不确定。同样若没有完整地读入最后一个元素,则其值也不确定。
1 |
|
函数声明 | 函数功能 |
---|---|
void free(void *ptr); |
释放ptr指向的存储空间 |
注意: 被释放的空间通常被送入可用存储区池,以后可以在调用 malloc、realloc 以及 calloc 函数来再分配。
1 |
|
函数声明 | 函数功能 |
---|---|
FILE * freopen(const char *filename, const char *mode, FILE *stream); |
以指定模式重新指定到另一个文件 |
参数:
1 |
|
函数声明 | 函数功能 |
---|---|
double frexp (double x, int * exp); |
将x 分解为有效位 和 2 的整数指数。(double)。 |
float frexpf (float x, int * exp); |
将x 分解为有效位 和 2 的整数指数。(float)。 |
long double frexpl (long double x, int * exp); |
将x 分解为有效位 和 2 的整数指数。(long double)。 |
注意: 有效位的绝对值范围为 0.5(包括) 到 1(不包括)。x = 有效位 * $2^{exp}$
1 |
|
函数声明 | 函数功能 |
---|---|
int fscanf(FILE *stream, char *format[,argument...]); |
从一个流中执行格式化输入 |
注意: fscanf 遇到空格和换行时结束。它与 fgets 有区别,fgets 遇到空格不结束。
1 |
|
函数声明 | 函数功能 |
---|---|
int fseek(FILE *stream, long offset, int fromwhere); |
重定位流上的文件指针位置 |
注意: 如果执行成功,stream 将指向以 fromwhere【偏移起始位置:文件头 **0(SEEK_SET)**,当前位置 1(SEEK_CUR),文件尾2(SEEK_END) 】为基准,偏移 offset(指针偏移量)个字节的位置。如果执行失败(比如 offset 超过文件自身大小),则不改变 stream 指向的位置。
1 |
|
函数声明 | 函数功能 |
---|---|
int fsetpos(FILE *stream, const fpos_t *pos); |
将文件指针定位在pos指定的位置上。如果成功返回0,否则返回非0。 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fstat(int handle,struct stat *buf); |
由文件描述符获取文件状态 |
1 |
|
函数声明 | 函数功能 |
---|---|
long ftell(FILE *stream); |
获取文件指针当前位置相对于文件首的偏移字节数 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fwrite(const void *ptr, int size, int nitems, FILE *stream); |
把ptr所指向的数组中的数据写入到给定流stream中 |
参数: |
注意: 如果写入成功,fwrite 返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nitems 参数不同,则会显示一个错误。
1 |
|
函数声明 | 函数功能 |
---|---|
double fabs(double x); |
返回 x 的绝对值(double) |
float fabsf(float x); |
返回 x 的绝对值(float) |
long double fabsl(long double x); |
返回 x 的绝对值(long double) |
int fclose(FILE *stream); |
关闭一个文件流 |
int fcloseall(void); |
关闭除标准流(stdin、stdout、stderr、stdprn、stdaux)之外的所有打开的流,刷新所有的流缓冲区,并返回关闭的流数。 |
char * fcvt(double value, int ndigit, int *decpt, int *sign); |
把一个双精度浮点数转换为字符串 |
double fdim (double x, double y); |
计算 x 和 y 之间的正差值 (double) |
float fdimf (float x, float y); |
计算 x 和 y 之间的正差值 (float) |
long double fdiml (long double x, long double y); |
计算 x 和 y 之间的正差值 (long double) |
FILE * fdopen(int handle, char *type); |
将文件描述符和文件流相关联 |
int feof(FILE *stream); |
检测流上的文件结束符。如果文件结束,则返回非0值,否则返回0 |
int ferror(FILE *stream); |
检测流上的错误【返回0,表示未出错;返回非零值,表示出错。】 |
int fflush(FILE *stream); |
清除读写缓冲区,并将缓冲区内的数据写回参数stream指向的文件中。 |
int fgetc(FILE *stream); |
从流中读取字符 |
int fgetchar(void); |
从流中读取字符 |
int fgetpos(FILE *stream); |
依据当前文件的句柄,获取当前访问指针位置信息 |
char * fgets(char *str, int n, FILE *stream); |
从指定的流中读取数据,每次读取一行 |
long filelength(int handle); |
获取文件的长度 |
int fileno(FILE *stream); |
获取参数stream指定的文件流所使用的文件描述符 |
void fillellipse(int x, int y, int xradius, int yradius); |
画出并填充一椭圆 |
void fillpoly(int numpoints, int *polypoints); |
画并填充一个多边形 |
int _findfirst(char *pathname, struct _finddata_t *_FindData); |
搜索与指定的文件名称匹配的第一个文件,若成功则返回第一个文件的文件描述符,否则返回-1L。 |
int _findnext(int handle, struct _finddata_t *_FindData); |
搜索与_findfirst函数提供的文件名称匹配的下一个实例,若成功则返回0,否则返回-1 |
int finitef (double x); |
检查 x 是无穷大值还是NaN 值(double)。如果是无穷大值或NaN值,返回 0;否则返回 1。 |
int finitef (float x); |
检查 x 是无穷大值还是NaN 值(float)。如果是无穷大值或NaN值,返回 0;否则返回 1。 |
void floodfill(int x, int y, int border); |
填充一个有界区域 |
函数声明 | 函数功能 |
---|---|
double fabs(double x); |
返回 x 的绝对值(double) |
float fabsf(float x); |
返回 x 的绝对值(float) |
long double fabsl(long double x); |
返回 x 的绝对值(long double) |
1 |
|
函数声明 | 函数功能 |
---|---|
int fclose(FILE *stream); |
关闭一个文件流 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fcloseall(void); |
关闭除标准流(stdin、stdout、stderr、stdprn、stdaux)之外的所有打开的流,刷新所有的流缓冲区,并返回关闭的流数。 |
1 |
|
函数声明 | 函数功能 |
---|---|
char * fcvt(double value, int ndigit, int *decpt, int *sign); |
把一个双精度浮点数转换为字符串 |
1 |
|
函数声明 | 函数功能 |
---|---|
double fdim (double x, double y); |
计算 x 和 y 之间的正差值 (double) |
float fdimf (float x, float y); |
计算 x 和 y 之间的正差值 (float) |
long double fdiml (long double x, long double y); |
计算 x 和 y 之间的正差值 (long double) |
1 |
|
函数声明 | 函数功能 |
---|---|
FILE * fdopen(int handle, char *type); |
将文件描述符和文件流相关联 |
1 |
|
函数声明 | 函数功能 |
---|---|
int feof(FILE *stream); |
检测流上的文件结束符。如果文件结束,则返回非0值,否则返回0 |
1 |
|
函数声明 | 函数功能 |
---|---|
int ferror(FILE *stream); |
检测流上的错误【返回0,表示未出错;返回非零值,表示出错。】 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fflush(FILE *stream); |
清除读写缓冲区,并将缓冲区内的数据写回参数stream指向的文件中。 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fgetc(FILE *stream); |
从流中读取字符 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fgetchar(void); |
从流中读取字符 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fgetpos(FILE *stream); |
依据当前文件的句柄,获取当前访问指针位置信息 |
1 |
|
函数声明 | 函数功能 |
---|---|
char * fgets(char *str, int n, FILE *stream); |
从指定的流中读取数据,每次读取一行 |
参数:
注意: 如果文件中的一行,不足 n-1 个字符,则读完该行就直接结束。如若该行(包括最后一个换行符)的字符数超过 n-1,则 fgets 只返回一个不完整的行,但是,缓冲区总是以 NULL 字符结尾,对 fgets 的下一次调用会继续读该行。函数成功将返回 stream,失败或读到文件结尾返回 NULL。因此不能直接通过 fgets 的返回值来判断函数是否是出错而终止的,应该借助 feof 函数或者 ferror 函数来判断。
1 |
|
函数声明 | 函数功能 |
---|---|
long filelength(int handle); |
获取文件的长度 |
1 |
|
函数声明 | 函数功能 |
---|---|
int fileno(FILE *stream); |
获取参数stream指定的文件流所使用的文件描述符 |
1 |
|
函数声明 | 函数功能 |
---|---|
void fillellipse(int x, int y, int xradius, int yradius); |
画出并填充一椭圆 |
参数:
int x
:椭圆中心点的x坐标。在二维图形环境中,x坐标通常表示水平方向上的位置,从左到右增加;int y
:椭圆中心点的y坐标。在二维图形环境中,y坐标通常表示垂直方向上的位置,从上到下增加;int xradius
:椭圆在x轴方向上的半径。它是从椭圆中心点到椭圆边缘在x轴方向上的最大距离。如果 xradius 较大,椭圆在水平方向上会显得更宽;int yradius
:椭圆在y轴方向上的半径。它是从椭圆中心点到椭圆边缘在y轴方向上的最大距离。如果 yradius 较大,椭圆在垂直方向上会显得更高。1 |
|
函数声明 | 函数功能 |
---|---|
void fillpoly(int numpoints, int *polypoints); |
画并填充一个多边形 |
参数:
numpoints
: 多边形边数polypoints
: 存储各顶点坐标的数组,每两个一组表示一个顶点的X,Y坐标1 |
|
函数声明 | 函数功能 |
---|---|
int _findfirst(char *pathname, struct _finddata_t *_FindData); |
搜索与指定的文件名称匹配的第一个文件,若成功则返回第一个文件的文件描述符,否则返回-1L。 |
int _findnext(int handle, struct _finddata_t *_FindData); |
搜索与_findfirst函数提供的文件名称匹配的下一个实例,若成功则返回0,否则返回-1 |
_findfirst
参数:
char *pathname
:一个指向以 null
结尾的字符串的指针,该字符串指定了要搜索的文件名模式。文件名模式可以包含通配符,如 *
(匹配任意数量的字符)和 ?
(匹配单个字符)。例如,"*.txt"
会匹配所有以 .txt
为扩展名的文件。如果 pathname
字符串的最后一个字符是目录分隔符,那么函数将搜索该目录下的所有文件和子目录;如果 pathname
是一个空字符串,函数将搜索当前目录。struct _finddata_t *_FindData
:一个指向 _finddata_t
结构体的指针,该结构体用于接收关于找到的文件的信息。_finddata_t
结构体通常包含文件的属性(如是否只读、是否隐藏等)、创建时间、访问时间、修改时间、文件大小以及文件名等信息。调用 _findfirst
函数后, _FindData
指向的结构体将被填充为与文件名模式匹配的第一个文件的信息。如果搜索成功,_findfirst
函数将返回一个唯一的搜索句柄,这个句柄可以在后续的 _findnext
函数调用中使用,以查找与相同文件名模式匹配的其他文件。_findnext
参数:
int handle
:一个由 _findfirst
函数返回的搜索句柄。这个句柄标识了一个特定的文件搜索操作,该操作在调用 _findfirst
后开始。搜索句柄是一个唯一的标识符,用于后续调用 _findnext
来检索与原始搜索条件匹配的下一个文件或目录。struct _finddata_t *_FindData
:同上 _findfirst
的参数1 |
|
函数声明 | 函数功能 |
---|---|
int finitef (double x); |
检查 x 是无穷大值还是NaN 值(double)。如果是无穷大值或NaN值,返回 0;否则返回 1。 |
int finitef (float x); |
检查 x 是无穷大值还是NaN 值(float)。如果是无穷大值或NaN值,返回 0;否则返回 1。 |
1 |
|
函数声明 | 函数功能 |
---|---|
void floodfill(int x, int y, int border); |
填充一个有界区域 |
参数:
int x
:要开始填充的区域的起始点的 x 坐标;int y
:要开始填充的区域的起始点的 y 坐标;int border
:填充的边界颜色。泛洪填充算法会从起始点 (x, y) 开始,将所有相邻的、颜色与起始点相同的区域填充为新的颜色,直到遇到边界颜色 border 为止。这样,算法就不会越过由 border 颜色定义的边界,从而保证了填充区域的准确性。1 |
|