




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c语言标准库函数参考网页:/reference/clibrary/参考书:嵌入式Linux上的C语言编程实践其实在参考网页里,你已经可以找到所有C语标准库函数。这里我只罗列我所学到的:C语言的标准库函数集合有: : 标准输入输出函数集合. : 判断字符类型(是否大写,数字,空格)的函数集合. : 操作字符串的函数集合. : 数学应用相关函数集合. : 工具集,包括类型转换和一些系统函数. : 增加断言功能的集合. : 不定参数的工具包.例如printf函数就用到此包. : 支持函数跳转功能的集合. : 处理中断的集合. : 处理日期和时间的集合. : 整数类型最大值和最小值集合.和具体实现有关. : 浮点类型最大值和最小值集合.和具体实现有关.1.标准格式化输入、输出类函数 涉及的头文件有stdio.h和stdarg.h *scanf 函数:格式化输入字符串 *printf 函数:格式化输出字符串 *putchar 函数:输出字符到标准输出 *getchar 函数:从标准输入获取字符 *putc 函数:向文件输出字符 *getc 函数:从文件输入字符 while(c=getchar()!=EOF) putchar(c)c=getc(pFile) getchar()等价于getc(stdin) *gets 函数:获得字符串 *puts 函数: 输出指定字符串 *ungetc 函数:把字符写回流中2.字符处理及转换函数 *sprintf 函数:格式化输出字符串到一个缓冲区 sprintf(s,%d,123) sprintf(s,%08X,456) ;转16进制 sprintf(s,%10.3f,3.1434) *strcat和strncat函数:字符串连接 char *strncat(char *dest, const char *src, size_t n) *strcpy和strncpy函数:字符串复制 char strncpy(char *dest, const char *src, size_t maxlen) *strcmp和strncmp函数: 字符串比较 int strcmp(const char *s1,const char *s2) s1s2 return 1 s1=s2return0 s1s2 return -1 *strlen 函数:获取字符串长度 *strchr和strrchr 函数: 字符/字符串定位 strchar:定位一个字符第一次出现的位置 strrchr:定位一个字符最后一次出现的位置 *strstr函数:字符串查找*strupr和strlwr函数:字母形式转换 *strdup和strndup函数:字符串复制char * strdup(const char *s) 将字符串s复制到指定的内存单元3.数学计数类函数 div acos atan cos tan cosh exp frexp ldexp log modf pow sqrt ceil abs floor4.数据结构和算法类函数 *bsearch函数:二元搜索 *lfind函数:线性搜索 *lsearch函数:线性搜索 *qsort函数:利用快速排序法排列数组 *rand函数:产生随机数5.文件I/O操作类相关函数 *fopen函数:打开文件 *fclose函数:关闭文件 *fgetc函数:从文件中读取一个字符 fp=fopen(exit,r) while(c=fgetc(fp)!=EOF) *fputc函数:将一指定字符写入文件流 *fgets函数:从文件中读取一字符串 *fputs函数:将一指定字符串写入文件内 *rewind函数:重设文件流的读写位置为文件开头 *ftell函数:取得文件流的读取位置 *fseek函数:取得文件流的读取位置 *fwrite函数:建文件写至文件流 *fread函数:从文件流读取数据 *fgetpos函数:获得文件位置 把stream的当前位置记录在*position中,供随后的fsetpos()调用使用 *fsetpos函数:设置文件位置6.工具函数 *assert函数:程序诊断*setjmp 函数:保存调用的linux中C语言的扩展库函数参考书:嵌入式Linux上的C语言编程实践1. 文件I/O操作函数 *open函数:打开文件 int open(const char * pathname, int flags) *close函数:关闭文件 *read函数:读文件 ssize_t read(int_fd, void * buf, size_t count) 将fd所指的文件传送count个字节到buf指针所指的内存中。 *write函数:写文件 ssize_t write (int fd, const void * buf, size_t count) 把以参数buf为起始的内存中的count个字节写入到参数fd所指的文件中,文件读写位置也会随之移动。 *lseek函数:文件定位 off_t lseek(int fildes , off_t offset ,int whence);retuen 当前的读写位置 *flock函数:锁定文件 int flock(int fd, int operation) *mmap函数和munmap函数:内存映射 int munmap(void *start, size_t length) 将某个文件内容映射到内存中,对该内存区域的存取既是直接对该文件内容的读写。 *create函数:创建新文件 int create (const char * pathname, mode_t mode)*fcntl函数:改变已打开的文件属性 int fcntl(int fields, int cmd, int arg) 若执行成功则返回新的描述符,否则返回-12.文件权限相关的操作函数 *access函数:判断是否具有存取文件的权限 int access(const char * pathname,int mode) if (0=access(argv1,W_OK) R_OK X_OK F_OK *chown函数和fchown函数:改变文件的所有者 int fchown(int fd, uid_t owner, gid_t group) *chmod函数和fchmod函数:改变权限int fchmod(int fildes, mode_t mode) *unlink函数:删除文件3.用户组操作函数 *getegid函数和setegid函数:获得/设置有效的组识别码 gid_t gete (gid_t egid) *geteuid函数和seteuid函数:获得/设置真实的用户识别码 uid_t getuid (void)4.信号类函数 *kill函数:传送信号给指定的进程int kill(pid_t pid, int sig) *rais函数:信号发送 int raise(int sig) *alarm函数:设置定时器 unsigned int alarm (unsigned int seconds) *signal函数:信号安装函数sighandler_t signal(int signum, sighandler_t handler)5.进程处理函数 *getpid函数和getppid函数:获得进程ID和父进程IDpid_t getpid(void) pid_t getppid(void) *fork函数:建立子进程 pid_t fork(void) 父进程得到的返回值是子进程的进程号,而子进程则返回0*sleep函数:让进程暂停一段时间unsigned int sleep(unsigned int seconds) *exec函数:找到可执行文件 *_exit函数:结束进程执行动态内存的堆与栈参考书:嵌入式Linux上的C语言编程实践1.程序内存区域的使用 存储区域分为:静态和动态静态:只读数据区(RO DATA),已初始化读写数据区(RW DATA),未初始化读写数据区(BSS) 动态:堆内存(heap)和栈内存(stack) 堆内存是从低地址向高地址分配,栈内存是从高地址向低地址分配2.C程序中栈空间的使用 在C语言程序中,栈空间是由编译器管理的,在程序中可以体现栈空间使用的例子是参数传递,返回值的使用以及自动变量的空间。3.C程序中堆空间的使用 在C语言程序中,堆内存区域的分配和释放是通过调用库函数来完成的,他们的使用需要包含标准库文件: #include 实现堆内存分配和释放的四个主要函数为: void * malloc(size_t size) 分配内存空间 void free(void *ptr) 释放内存空间 void * calloc(size_t nmemb, size_t size) 分配内存空间 void * realloc(void * ptr, size_t size) 重新分配内存空间4.堆内存和栈内存使用的比较 最经典的swap例子: void swap(int a, int b) int tmp; tmp=b; b=a; a=tmp; return; 这是无法实现swap的,因为,swap函数在调用时创建了一个新的栈空间,当栈返回后,这个栈区域已经被释放了。所以,必须要用指针。 认真体会两个例子:typedef struct _S100 char string100;S100;void fun_para1(S100 a)printf(From para:%sn,a.string);strcpy(a.string,-);printf(fun_para1 change :%sn, a.string);return;void test_fun_para1(void)S100 a;strcpy(a.string, +)fun_para1(a);printf(after fun_para1 return: %sn, a.string);return;运行结果:From para:+fun_para1 change: -after fun_para1 return:+void fun_para3(char a100)strcpy(a,-);printf(fun_para1 change: %sn,a);retrun;void test_fun_para3(void)char a100;strcpy(a,+);fun_para3(a);printf(after fun_para3 return:%sn, a);return;运行结果:from para:+fun_para1 change:-after fun_para3 return:-从运行的结果中,可以得出这样的结论:在函数参数中使用结构体的时候,整个结构体被压入栈内存,和一般变量的情况一样。数组在作为参数使用时,将被当做指针处理函数指针的使用参考书:嵌入式Linux上的C语言编程实践1.函数指针的概念: 在C语言中:指针的本质是一个内存的地址,函数指针则是一个指向位于代码段的函数代码地址的指针。 对于函数来说,其地址和函数名称代表的含义是相同的。 在C语言编程中,数据结构和算法是两个基本的元素,通过函数指针,数据结构可以内嵌算法。2.函数指针的使用 *最基本的用法: int add(int a,int b) . int sub(int a,int b) . int main() int (*pf)(int,int); pf=add; result=pf(100,200); pf=sub; result=pf(100,200); *类型转换: int add(int a,int b) . int sub(int a,int b) . int main() void *pf; pf=add; result=(int(*)(int,int)pf)(100,200); pf=sub;result=(int(*)(int,int)pf)(100,200); *函数指针的类型定义 typedef int (*fun_t)(int,int);fun_t pf; pf=add; result=pf(100,200); *函数指针作为结构体成员struct source int a; int b; fun_t operation; /等价于int * fun_t(int,int);int main(int argc, char * argv) struct source data; int result; data.a=200; data.b=100; data.operation=add; result=data.operation(data.a,data.b); *函数指针作为函数的参数int calculate (int a,int b, fun_t operation) int result; result= operation(a,b); return result;int main(int argc, char * argv) int a,b, result; a=200; b=100; result=calculate(a,b,add); *函数指针作为函数的返回值fun_t getoperation(char a) fun_t result; switch(a) case +; result=add; break; case -; result=sub; break; return result;int main (int argc, char * argv) int a,b,result; char oper; a=200; b=100; oper=+; result=getoperation(oper)(a,b); *函数指针数组enum oper_add=0, oper_substatic const fun_t oper_tableoper_num= add, subint main(int argc,char *argv) int a,b,result; a=200; b=100; result=oper_tableoper_add(a,b);、回调函数 作为c语言来说,只有函数的说法。因此不管是回调函数还是函数都是函数,在定义上是没有区别的。置于在某些系统中,有些函数是你写并被你自己调用,这就是你说的“过程函数”而另一些俄函数是由你来写但是在某些情况下不光由你来调用还可能被系统调用,这种函数就是“回调函数”。 既然在某些情况下,系统也要调用则这种函数在定义上必须符合系统预先定义的一些标准,比如窗口函数是最普遍的回调函数系统规定了这个函数必须有一个LRESULT的返回值,以及它需要的四个参数LRESULT function(hWnd, message, wParam, lParam)。 回调函数就是为系统提供一个接口,系统就会记录下这个函数的地址,当某个事件发生的时候,系统就可以调用你提供的这个接口干你想干的事情。比如系统有这样一个功能:void 注册开水报警器(void (* 我的开水报警器)(void);我们自己写个函数:void 我的开水报警器(void) printf(“水开了!n”);然后调用系统提供的接口注册我们的函数开水注册报警器(我的开水报警器);这样,指定事件发生的时候,就会调用我们自己写的函数。 回调函数(callback function)是一种供系统调用的函数。在设置回调函数时,将你的回调函数的地址作为参数送给系统。当系统调用时(如事件发生,启动功能.),就自动会执行你的回调函数。程序本身不需要执行该函数。常见的回调函数在 directX(OpenGL),Driver Design中要枚举驱动程序,显示模式等。 回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给 调用者从而实现调用。回调函数使用是必要的,在我们想通过一个统一接口实现不 同的内容,这时用回掉函数非常合适。比如,我们为几个不同的设备分别写了不同 的显示函数:void TVshow(); void ComputerShow(); void NoteBookShow().等 等。这是我们想用一个统一的显示函数,我们这时就可以用回掉函数了。void sho w(void (*ptr)(); 使用时根据所传入的参数不同而调用不同的回调函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农产品休闲消费趋势-洞察及研究
- 恶劣天气应对策略-洞察及研究
- 突破现实边界-洞察及研究
- 脑成像辅助药物筛选-洞察及研究
- 事务管理创新-洞察及研究
- 跨域数据融合技术-第3篇-洞察及研究
- 等离子熔炼技术改进-第1篇-洞察及研究
- 二零二五年度环境噪声监测与控制服务合同样本
- 2025年快递员劳动合同书范本
- 2025年农民土地征收补偿合同
- 老年肌肉衰减综合征(肌少症)课件
- 山西省持有《危险废物经营许可证》单位一览表
- PCB全制程培训教材
- 《李将军列传》教学教案及同步练习 教案教学设计
- 烟草配送车辆GPS管理方案
- 中图法分类号与中图分类法查询
- 酒店客房验收工程项目检查表(双床房、大床房、套房)
- 开音节闭音节中元音字母的发音规律练习
- 电力设备预防性试验及维护保养方案
- 融资性担保贷款保后检查表
- 公司人力资源管理制度管理制度
评论
0/150
提交评论