C语言
文章平均质量分 53
crazy_koala
这个作者很懒,什么都没留下…
展开
-
c标准文件io函数的原型和注意点
fopen()需要头文件:#include函数原型:FILE *fopen(const char *path,const char *mode)函数参数:path:要打开的文件的路径及文件名mode:文件打开方式,见下函数返回值:成功:指向文件的FILE类型指针失败:NULL以下是mode参数允许使用的取值及说明:r或rb 以只读的方式打开文件,该文件必须存在r原创 2017-01-08 14:32:23 · 339 阅读 · 1 评论 -
格式化io与非格式化io得对比理解
测试函数1#include<stdio.h>#include<string.h>int main(){ int a[5]={65,66,67,68}; char value[10],i; FILE *pf; if(!(pf = fopen("printf.txt","w+"))) { perror("open file:");原创 2017-01-07 16:56:40 · 1677 阅读 · 0 评论 -
汇编C语言混合编程
ARM汇编语言和C语言混合编程 ATPCS规则体现了一种模块化设计的思想,其基本内容是C模块(函数)和汇编模块(函数)相互调用的一套规则(C51中也有类似的一套规则)。我感觉比在线汇编功能强大(不用有很多忌讳),条理更清楚(很简单的几条规则)。ATPCS规则内容:1)寄存器的使用规则1、子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。此时r0~r原创 2017-03-04 15:31:04 · 882 阅读 · 0 评论 -
可移植的单片机printf(print by format)函数实现
一个有趣的实验: 说明%号一出现要么被”吃掉”要么他会终止与f,d,s。 那么再加以大胆猜想: 假设 int sprintf(const char *format, …); 当然我们需要可变参数标准库的支持因为调用的可变参数的方法。当读取到了一个%号,就开始匹配fds中的任意一个,每种的处理方式都不一样。分别是: char *itoc(int value); char *ftoc(原创 2017-03-08 13:37:42 · 2941 阅读 · 0 评论 -
C语言可变长参数列表原理与实现
可变参数在编程中的实现。 stdarg.h标准库提供的宏支持了可变长参数列表的使用。 当然,在一些情况下也可以自己通过其实现原理来使用可变长参数编程。 条件一: C语言编程中函数的形参入栈顺序都是从右至左。栈的生长方向是,低地址《—— 高地址,而且栈由系统分配,不存在碎片化内存。 结论:只要知道一个参数的地址,就可以顺势推出其他参数的地址。在使用可变长参数的情形下,都会想方设法的标注参数的原创 2017-03-08 19:17:29 · 983 阅读 · 0 评论 -
stdarg的用法(可变参数的用法)
stdarg宏: 可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。 这个头文件声明的一个va_list的类型,和三个宏va_start,va_arg,va_end。我们可以生明一个va_list类型的变量,配合三个宏使用。 va_start(arg, last have name arg); 初始化之后,arg将指向第一个无名参数。 va_arg(ar原创 2017-03-07 16:36:39 · 573 阅读 · 0 评论 -
Linux的内核的信号量
信号量结构很简单,各个成员的作用通过名字基本就知道干啥用的:struct semaphore { raw_spinlock_t lock;//保证信号量原则操作的锁 unsigned int count;//“量”,如果为1一般叫互斥量,>1叫做计数信号量 struct list_head wait_list;//当信号量无法获取时,进程可以在这排队等着};结合信号量的...原创 2019-09-09 16:55:24 · 205 阅读 · 0 评论 -
Linux如何处理信号
从Crtl+C开始:之前一直有一个问题:在shell下运行一个程序,每次想中途停止这个程序时,下意识的就会按下Ctrl+C就可以终止当前阻塞在终端的进程,Ctrl+C这个组合键按下到底都发生了什么?其实这个操作就是向前台进程发送SIGINT信号。以下是linux支持的信号列表:使用kill -n pid或在代码中使用int kill(pid_t pid, int sig);可以向一...原创 2019-09-09 17:15:00 · 195 阅读 · 0 评论