常用C函数(2)

2019-03-27 19:34

SIG_IGN:忽略此信号。

raise函数的作用是向正在执行的程序发送一个信号,从而使得当前进程产生一个中断而转向信号处理函数signal执行。其中参数sig为信号名称,它的取值范围同函数signal中的参数sig取值范围相同,见表9-6。

下面通过例子理解函数signal和raise。 例程9-2 signall和raise函数演示

#include #include void Print1(); void Print2(); int main()

{ signal(SIGINT,Print1);

printf(\getchar();

signal(SIGSEGV,Print2);

printf(\getchar();

raise(SIGSEGV); }

void Print1() {

printf(\}

void Print2() {

printf(\}

本例程首先通过用户终端输入Ctrl+c产生一个终端中断,然后应用signal函数调用中断处理函数Print1;再通过raise函数生成一个无效内存访问中断,并通过signal函数调用中断处理函数Print2。

本例程的运行结果为:

Please enter Ctr+c for interupt ^C

This is a SIGINT interupt!

Please enter any key for a interupt a

This is a SIGSEGV interupt!

:可变参数表

可变参数表中的宏是用来定义参数可变的函数的。在C语言中,有些库函数或者用户自定义的函数的参数是可变的,常用省略号“??”(例如库函数中的printf),定义这样的函数就要使用到中的宏。

1、va_list

用于保存宏va_start,va_arg以及va_end所需信息的数据类型。 2、中还定义了三个宏

void va_start(va_list ap, parmN); type va_arg(va_list ap,type);

void va_end (va_list ap);

va_start的作用是初始化ap,因此va_start要在所有其它的va_开头的宏前面最先使用(除了用va_list定义变量外),后面的va_copy, va_arg, va_end都要使用到ap。在一对va_start和va_end之间不能再次使用va_start宏。其中,parmN 为\之前的最后一个参数。例如, printf函数定义为:printf(const char *format, ...); 那么在printf函数中的va_start使用之后, parmN 的值就等于*format。

va_arg的作用就是返回参数列表ap中的下一个具有type类型的参数, 每次调用va_arg都会修改ap的值, 这样才能连续不断地获取下一个type类型的参数。

va_end与va_start构成了一个scope,va_end标志着结束,va_end之后ap就无效了。

:公共定义

在头文件中,指定了标准库中的公共定义。其中主要包括以下内容: 1、NULL 空指针类型常量。

2、offset(type,member-designator)

它是扩展iz-t类型的一个整型常数表达式。它的值为从type定义的结构类型的开头到结构成员member-designator的偏移字节数。

3、ptrdiff_t

表示两指针之差的带符号整数类型。 4、size_t

表示由sizeof运算符计算出的结果类型,它是一个无符号整数类型。 5、wchar_t

它是一种整数类型,取值范围为在被支持的地域环境中最大扩展字符集的所有字符的各种代码,空字符代码值为0。

:输入输出

在头文件中定义了输入输出函数,类型和宏。这些函数、类型和宏几乎占到标准库的三分之一。

下面给出头文件中声明的函数以及功能简介,见下表。

中声明的函数

函数定义 FILE *fopen(char *filename, char *type) FILE *fropen(char *filename, char *type,FILE *fp) int fflush(FILE *stream) int fclose(FILE *stream) int remove(char *filename) int rename(char *oldname, char *newname) FILE *tmpfile(void) 函数功能简介 打开一个文件 打开一个文件,并将该文件关联到fp指定的流 清除一个流 关闭一个文件 删除一个文件 重命名文件 以二进制方式打开暂存文件 char *tmpnam(char *sptr) int setvbuf(FILE *stream, char *buf, int type, unsigned size) int printf(char *format...) int fprintf(FILE *stream, char *format[, argument,...]) int scanf(char *format[,argument,...]) int fscanf(FILE *stream, char *format[,argument...]) int fgetc(FILE *stream) char *fgets(char *string, int n, FILE *stream) int fputc(int ch, FILE *stream) int fputs(char *string, FILE *stream) int getc(FILE *stream) int getchar(void) char *gets(char *string) int putchar(int ch) int puts(char *string) int ungetc(char c, FILE *stream) int fread(void *ptr, int size, int nitems, FILE *stream) int fwrite(void *ptr, int size, int nitems, FILE *stream) int fseek(FILE *stream, long offset, int fromwhere) long ftell(FILE *stream) int rewind(FILE *stream) int fgetpos(FILE *stream) int fsetpos(FILE *stream, const fpos_t *pos) void clearerr(FILE *stream) int feof(FILE *stream) int ferror(FILE *stream) void perror(char *string) 创建一个唯一的文件名 把缓冲区与流相关 产生格式化输出的函数 传送格式化输出到一个流中 执行格式化输入 从一个流中执行格式化输入 从流中读取字符 从流中读取一字符串 送一个字符到一个流中 送一个字符到一个流中 从流中取字符 从stdin流中读字符 从流中取一字符串 在stdout上输出字符 送一字符串到流中 把一个字符退回到输入流中 从一个流中读数据 写内容到流中 重定位流上的文件指针 返回当前文件指针 将文件指针重新指向一个流的开头 取得当前文件的句柄 定位流上的文件指针 复位错误标志 检测流上的文件结束符 检测流上的错误 系统错误信息 在头文件中还定义了一些类型和宏。

:实用函数

在头文件中声明了一些实现数值转换,内存分配等类似功能的函数。下面给出头文件中声明的函数以及功能简介,见下表。

中声明的函数

函数定义 double atof(const char *s) int atoi(const char *s) long atol(const char *s) double strtod (const char*s,char **endp) long strtol(const char*s,char **endp,int base) unsinged long strtol(const char*s,char **endp,int base) int rand(void) void srand(unsigned int seed) void *calloc(size_t nelem, size_t elsize) void *malloc(unsigned size) void *realloc(void *ptr, unsigned newsize) void free(void *ptr) 函数功能简介 将字符串s转换为double类型 将字符串s转换为int类型 将字符串s转换为long类型 将字符串s前缀转换为double型 将字符串s前缀转换为long型 将字符串s前缀转换为unsinged long型 产生一个0~RAND_MAX之间的伪随机数 初始化随机数发生器 分配主存储器 内存分配函数 重新分配主存 释放已分配的块 void abort(void) void exit(int status) int atexit(atexit_t func) char *getenv(char *envvar) void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *)) void qsort(void *base, int nelem, int width, int (*fcmp)()) int abs(int i) long labs(long n) div_t div(int number, int denom) ldiv_t ldiv(long lnumer, long ldenom) 异常终止一个进程 终止应用程序 注册终止函数 从环境中取字符串 二分法搜索函数 使用快速排序例程进行排序 求整数的绝对值 取长整型绝对值 将两个整数相除, 返回商和余数 两个长整型数相除, 返回商和余数 有关上面列出的这些标准实用函数的功能、用法、例程等。 :字符串函数

在头文件中定义了一些字符串函数。可以将它们分为两组。第一组函数名以str开头,主要进行字符串的操作;第二组函数名以mem开头,按照字符数组的方式操作对象。下面给出头文件中声明的函数以及功能简介,见下表。

中声明的函数

函数定义 char *strcpy(char *str1, char *str2) char *strncpy(char *d, char *s, int m) char *strcat(char *destin, char *source) char *strncat(char *d, char *s,int n) int strcmp(char *str1, char *str2) int strncmp(char *str1, char *str2, int m) char *strchr(char *str, char c) char *strrchr(char *str, char c) size_t strspn(char *str1, char *str2) size_t strcspn(char *str1, char *str2) char *strpbrk(char *str1, char *str2) char *strstr(char *str1, char *str2) size_t strlen(char *cs) char *strerror(int errnum) char *strtok(char *str1, char *str2) void *memcpy(void *d, void *s, unsigned n) 函数功能简介 串拷贝函数 串拷贝函数 字符串拼接函数 字符串拼接函数 串比较函数 串比较函数 在一个串中查找给定字符的第一个匹配之处 在串中查找指定字符的最后一个出现 在串中查找指定字符集的子集的第一次出现 在串中查找第一个给定字符集内容的段 在串中查找给定字符集中的字符 在串中查找指定字符串的第一次出现 求字符串的长度 返回指向错误信息字符串的指针 查找由在第二个串中指定的分界符分隔开的单词 从源s中拷贝n个字节到目标d中 void *memmove(void *d, void *s, unsigned n) 移动一块字节 void *memcmp(void *s1, void *s2, unsigned n ) 比较两个串s2和s1的前n个字节 void *memchr(void *s, char ch, unsigned n) 在数组的前n个字节中搜索字符 void *memset(void *s, char ch, unsigned n) 将s的前n个字符替换为字符ch

:日期与时间函数

在头文件中,声明了一些处理日期和时间的类型与函数。clock_t和time_t是两个表示时间值的算术类型。结构struct tm存储了一个日历时间的各个成分。结构tm的成员的意义及其正常的取值范围如下:

struct int int int int int int int int int };

tm {

tm_sec; /*从当前分钟开始经过的秒数(0,61)*/ tm_min; /*从当前小时开始经过的分钟数(0,59)*/ tm_hour; /*从午夜开始经过的小时数(0,23)*/ tm_mday; /*当月的天数(1,31)*/

tm_mon; /*从1月起经过的月数(0,11)*/ tm_year; /*从1900年起经过的年数*/

tm_wday; /*从本周星期天开始经过的天数(0,6)*/ tm_yday; /*从今年1月1日起经过的天数(0,356)*/ tm_isdst; /*夏令时标记*/

如果夏令时有效,夏令时标记tm_isdst值为正;若夏令时无效,tm_isdst值为0;如果得不到夏令时信息,tm_isdst值为负。

下面给出头文件中声明的时间函数,见下表。

中声明的时间函数

函数定义 clock_t clock(void) time_t time(time_t *tp) double difftime(time_t time2, time_t time1) time_t mktime(struct tm *tp) char *asctime(const struct tm *tblock) char *ctime(const time_t *time) struct tm *gmtime(const time_t *timer) struct tm *localtime(const time_t *timer) 函数功能简介 确定处理器时间函数 返回当前日历时间 计算两个时刻之间的时间差 将分段时间值转换为日历时间值 转换日期和时间为ASCII码 把日期和时间转换为字符串 把日期和时间转换为格林尼治标准时间(GMT) 把日期和时间转变为结构 size_t strftime(char *s,size_t smax,const char *fmt, 根据fmt的格式要求将*tp中的日期与时间转const struct tm *tp) 换为指定格式。

二、IO函数

clearerr:复位错误标志函数

函数原型:void clearerr(FILE *fp); 头文件:#include 是否是标准函数:是 函数功能:复位错误标志,即:使fp所指向的文件中的错误标志和文件结束标志置0。当输入输出函数对文件进行读写出错时,文件就会自动产生错误标志,这样会影响程序对文件的后续操作。clearerr函数就是要复位这些错误标志,也就是使fp所指向的文件的错误标志和文件结束标志置0,从而使文件恢复正常。

返回值:无

例程如下:复位错误标志演示。

#include int main(void) {

FILE *fp; char ch;

/* 以写的方式打开一个文件名为test.txt的文件 */ fp = fopen(\

/* 错误地从fp所指定的文件中读取一个字符,并打印它*/


常用C函数(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数据库系统原理参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: