
Linux下C库学习
文章平均质量分 57
mill_li
这个作者很懒,什么都没留下…
展开
-
Linux下C库学习 - math.h
math.h众所周知,如果你想使用一些数学函数,那么就需要包含math.h,这里面基本包含了所有常用的数学函数(sin,cos,tan),以及数学常量(PI),等等,既然C库里面开发好了,那我们就看看到底里面都有什么。既然是数学函数库,首先我们就需要对操作数进行限制,比如0不能作为除数,对负数开方,对负数求对数等等,这些在数学上本身就是不合理的,那如果让计算机去处理这些计算,很可能就会引起错误,因此原创 2017-01-16 10:12:35 · 7969 阅读 · 0 评论 -
Linux下C库学习 - stdlib.h
stdlib里面包含了C语言最常用的系统函数,既然是系统函数,那肯定和系统的实现有关系了,比如里面定义的一些变量:typedef size_t是unsigned integer类型typedef wchar_t 一个宽字符的大小struct div_t 是结构体类型 作为div函数的返回类型struct ldiv_t是结构体类型 作为ldiv函数的返回类型不同系统的实现肯定是不一样的,另外平常原创 2017-04-04 14:41:01 · 3604 阅读 · 0 评论 -
Linux下C库学习 - string.h
string.h中包含了我们平常所用的所有字符处理函数,除此以外还有内存管理函数void *memchr(const void *s, int c, size_t n);在某一内存范围中查找一特定字符int memcmp(const void *s1, const void *s2, size_t n); 比较内存内容void *memcpy(void *dest, const void *sr原创 2017-04-11 20:42:36 · 886 阅读 · 0 评论 -
Linux下C库学习 - stdio.h
我们一开始学习C语言的那些函数基本都是在stdio.h里面定义的,大致有如下函数clearerr(); 复位错误标志fclose(); 关闭一个流。feof(); 检测文件结束符ferror(); 检查流是否有错误fflush();更新缓冲区fgetpos(); 移动文件流的读写位置fopen();打开文件fread(); 从文件流读取数据freopen(); 打开文件fseek(原创 2017-03-29 20:56:38 · 3048 阅读 · 0 评论 -
Linux下C库学习 - stddef.h
stddef.h定义了一些标准宏和变量,标准宏有NULL 这个定义大家应该都比较熟悉了,是这样子的((void *)0)offsetof() 这个宏的定义是这样子的offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER),主要是用来求结构体中某个成员变量在该结构体中的偏移量,这里的TYPE就是该结构体,MEMBER就是该成员变量,(TYP原创 2017-03-22 20:26:49 · 1455 阅读 · 0 评论 -
Linux下C库学习 - setjmp.h
<setjmp.h>是C提供的用来完成非局部跳转的函数库,说到‘跳转’,大部分可能会先想到goto,但是使用goto的时候只能在函数内部进行使用,而使用<setjmp.h>中的函数可以在不同地方进行跳转,突破了这个限制,使用起来更便捷方便,那我们一起来看看<setjmp.h>中都有哪些函数吧setjmp函数原型int setjmp(jmp_buf env);</br>参数jmp_buf参数jmp原创 2017-01-19 14:07:11 · 441 阅读 · 0 评论 -
Linux下C库学习 - stdarg.h
想要函数使用可变参数,那就必须要包含stdarg.h这个头文件,简单就不说了,我们重新来看看可变参数的定义和使用吧。1.声明可变参数可变参数的声明有两点使用‘…’来代表可变参数可变参数之前必须有一个命名的参数简单说就是如果你想声明一个可变参数的函数,那么有两种形式func(...) //错误,前面必须有一个命名的参数func(xxx,...) //正确,xxx可以用任意的参数原创 2017-02-08 11:15:56 · 729 阅读 · 0 评论 -
Linux下C库学习 - signal.h
本系列只是为了研究C语言的头文件,如果signal.h展开讲感觉就有点跑题了,网上有许多对信号机制的解析,写的都非常好,大家可以搜一些,这里就只对signal进行记录,以便后续继续学习。信号在命令行界面输入kill -l就可以看到所以的信号以及对应的编号列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信原创 2017-02-06 11:36:38 · 787 阅读 · 0 评论 -
Linux下C库学习 - 开篇概述
Linux下C库学习大部分人学习C语言的第一个程序应该都是这样子的#include <stdio.h>void main(void) { printf("Hello World !\n"); return 0;}有的书可能会讲stdio.h是标准输入输出的头文件,想要用输入输出功能就必须要包含这个头文件,但是除了输入输出功能,这个头文件还包含了那些东西呢?标准C库里面定义的那些头文原创 2017-01-09 17:21:29 · 694 阅读 · 0 评论 -
Linux下C库学习 - assert.h
assert.hassert.h最重要的或者说唯一的功能就是提供了assert函数,查阅man手册,assert函数是这样解释的 abort the program if assertion is false而man手册中assert的原型是这样声明的 void assert(scalar expression);这里参数用scalar声明,scalar的意思是说这个参数是标量参数,标量原创 2017-01-09 17:31:49 · 2033 阅读 · 0 评论 -
Linux下C库学习 - ctype.h
ctype.hctype.h里面主要定义了一些字符的测试和转化函数,都是一些类似工具的函数,一共有两类。1. isxxx函数,这类函数主要提供字符的测试功能,主要有如下几个int isalnum(int c);检查是否是字符(a - z)或者数字(0 - 9),如果是则返回非0,否则返回0,这个函数相当于调用isalpha(c) || isdigit(c) int isalpha(int c);检查原创 2017-01-10 11:25:15 · 1612 阅读 · 0 评论 -
Linux下C库学习 - error.h
error.h说到error.h,可能很多人都知道errno.h或者能想到perror函数,我甚至在网上看到说C里面没有error函数,其实error.h里面就提供了两个函数extern void error (int __status, int __errnum, const char *__format, ...) __attribute__ ((__format__ (__pr原创 2017-01-10 16:07:05 · 6600 阅读 · 0 评论 -
Linux下C库学习 - float.h
float.h说到float.h就必须要先说一下float,double,long double这三种数据类型在计算机里面的表示 说到浮点数,在计算机里面不像整数,是分为三个部分的符号位指数位尾数位指数位的长度决定了浮点数的表示范围,而尾数位的长度决定了浮点数的表示精度(小数点的位数)比如以float类型举例,float类型一般占32位,其中1位符号位,8位指数位,23位尾数位,因为指数位原创 2017-01-11 15:21:54 · 2303 阅读 · 0 评论 -
Linux下C库学习 - limits.h
limits.h和float.h相比较limits.h主要对整形数和字符型数据的的边界做了一些限制,头文件的内容很简单,不过他的作用很大,可以让你的程序在不同环境下都可以正常运行,比如,int类型有可能是16位,32位甚至64位,假如你在int类型占16位的机器上想使用int类型的最大值,如果没有limit.h那你只能写一个数值65535,但是如果你的程序在32位的机器上或者64位的机器上跑,程序可原创 2017-01-12 11:33:46 · 1703 阅读 · 0 评论 -
Linux下C库学习 - locale.h
locale.hC语言要用在哪里,都应该包含什么内容,包括什么功能。随着历史中各种需求的沉淀,和各种实现的积累,C标准也日趋于完善。历经了5年的成长,看来一切都基本完成,可以画上一个句号了。剩下的工作只是一些修修补补的小改动。正当X3J11委员会的成员们一致认为他们过去的工作“将已经有的实践制定为标准”很好的成就了C标准的构建,并且C标准已经基本完成。这时候,也正是C用在世界各地比较高峰的时期,一个原创 2017-01-13 14:42:56 · 1332 阅读 · 2 评论 -
Linux下C库学习 - time.h
头文件<time.h>中说明了一些用于处理日期和时间的类型和函数。其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同。因此,这里定义了一个关于时间的结构体struct tm {int tm_sec; /* 秒 – 取值区间为[0,59] */int tm_min; /* 分 - 取值区间为[0,59] */int tm_hour; /* 时 - 取值区间为[0,23原创 2017-04-12 21:10:50 · 2258 阅读 · 0 评论