- 博客(27)
- 收藏
- 关注
转载 名字修饰约定extern "C"与extern "C++"浅析
所谓名字修饰约定,就是指变量名、函数名等经过编译后重新输出名称的规则。 比如源代码中函数名称为int Func(int a,int b),经过编译后名称可能为?Func@@YAHHH@Z、?Func@@YGHHH@Z、_Func@8,也有可能与源代码中名称相同为Func。 影响编译后输出的名称通常与名字修饰约定(extern "C"、extern "C++"等)和函数调用约
2016-11-21 15:17:21 302
转载 __stdcall,__cdecl,__fastcall的区别
一、三者区别一览表 __stdcall__cdecl__fastcall参数传递方式右->左 压栈右->左 压栈左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数仍旧自右向左压栈传送清理栈方被调用函数清理(即函数自己清理
2016-11-21 14:51:45 306
转载 C++ 调用C
首先,为什么要使用extern "C"修饰符?C++调用其它语言的函数,由于编译器生成函数的机制不一样,所以需要经过特殊处理,才可以调用。调用C语言的函数,需要在函数声明的地方语句extern "C"。如果不使用该语句,在链接的时候,编译器就会报以下这种错误。Test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl DeleteStack(
2016-11-21 14:17:21 329
原创 文件I/O-010.clr_fl()的实现
/*clr_fl(int fd,int flags);将flags的文件状态标志从fd中去除*/#include #include #include #include /*打印fd的文件标志*/void PrinFl(int fd){ int val=fcntl(fd,F_GETFL,0); if(val == -1) { printf("erro\n");
2016-09-28 22:37:44 467
原创 文件I/O-009.set_fl()的实现
/*set_fl(int fd,int flag);将flag的文件状态标志加入fd*/#include #include #include #include /*将flags的文件标志加入fd*/void set_fl(int fd,int flags){ int val=fcntl(fd,F_GETFL,0); if(val == -1) { prin
2016-09-28 22:36:44 427
原创 文件I/O-008.fcntl返回文件标志并解析打印标志
/*fcntl()返回文件标志并解析打印文件标志*/#include #include #include #include #include int main(int argc,char const *argv[]){ int val; val=fcntl(atoi(argv[1]),F_GETFL,0); if(val == -1) { printf("
2016-09-28 22:36:00 413
原创 文件I/O-007.argc,argv[]
#include #include int main(int argc,char const *argv[]){ int i; printf("argc=%d\n",argc); for(i=0;i<argc;i++) { printf("argv[%d]=%s\n",i,argv[i]); }}/*./a.out zhang taoargc=3ar
2016-09-28 22:34:59 278
原创 文件I/O-006.没有文件时 创建新的,若有则APPEND打开
/*若没有文件,则创建新文件,若有文件,则APPEND打开笔记 循环打开同一个文件,每次都是不同的文件描述符,每次都有一个文件表项,指向同一个V节点表项*/#include #include #include #include int main(int argc,char const *argv[]){ int fd; int i; char tmp='a'; fo
2016-09-28 22:33:23 902
原创 文件I/O-005.标准输入,输出,错误都关联到屏幕
/*STDIN_FILENO STDOUT_FILENO STDERR_FILENO默认都是关联屏幕*/#include #include #include #include int main(int argc,char *argv[]){ char buf[10]={0}; read(STDERR_FILENO,buf,9);//会从屏幕读,保存在buf,相当于g
2016-09-28 22:31:55 400
原创 文件I/O-004.read和write复制文件 I O效率
/*文件复制*/#include #include #include #include #define BUFFSIZE 4096 //4//4Kint main(int argc,char *argv[]){ int n; char buf[BUFFSIZE]; while((n=read(STDIN_FILENO,buf,BUFFSIZE)) > 0) {
2016-09-28 22:30:39 300
原创 文件I/O-003.read和write复制文件
/*文件复制*/#include #include #include #include #define BUFFSIZE 4096 //4//4Kint main(int argc,char *argv[]){ int fd1,fd2; int n; char buf[BUFFSIZE]; fd1=open(argv[1],O_RDONLY); if (-1 =
2016-09-28 22:29:30 365
原创 文件I/O-002.lseek空洞文件
/*制造空洞文件,空洞的部分写为0od -c file.holeod观察文件的实际内容,od -c 以字符形式打印*/#include #include #include #include char buf1[]="abcdefghij";char buf2[]="ABCDEFGHIJ";int main(){ int fd; fd=open("file.hole
2016-09-28 22:28:20 308
原创 文件I/O-001.lseek验证有些文件是否能lseek
/*lseek测试能否对标准输入设置偏移量*/#include #include #include //lseek需要int main(int argc,char const argv[]){ if(lseek(STDIN_FILENO,0,SEEK_CUR) == -1) { printf("cannot seek\n"); } else
2016-09-28 22:26:55 286
原创 字符串-字符串的全排列-递归实现
/*全排列问题 加入输入abc,输出他的全排列abc acb bac bca cab cba方法一 递归实现思路 每一层递归固定一位*/#include #include #include int flag=0;/*交换*/void swap(char *a,char *b){ char tmp=*a; *a=*b; *b=tmp;}/*每一层递归固定一位
2016-09-28 20:06:05 353
原创 字符串-字符串的包含-寻找兄弟字符串 课后题答案
问题:如果两个字符串中的字符串一样,出现的次数也一样,只是顺序不同,则认为两个字符串是兄弟字符串.现在提供一个字符串,请问如何在字典中迅速找到他的兄弟字符串/*2016 9 27问题:如果两个字符串中的字符串一样,出现的次数也一样,只是顺序不同,则认为两个字符串是兄弟字符串.现在提供一个字符串,请问如何在字典中迅速找到他的兄弟字符串1.简单起见字符串的元素都为小写2.目标abc
2016-09-27 20:53:02 683
原创 字符串-字符串的包含-两种基本思路
/*2016 9 27字符串a有"ABCD",字符串b有"BCE",写个函数判断a中是否包含b中所有的元素返回bool类型方法一 蛮力轮询时间复杂度 O(mn)*/#include #include #include int ContainString(char *a,char *b){ int i,j; for(i=0;i<strlen(b);i++) {
2016-09-27 19:55:33 404
原创 字符串-字符串的旋转
问题:给定一个字符串,将字符串前面若干个字符移到字符串尾部例子abcdef前三个字符移动到后面,变成defabc方法一 蛮力位移时间复杂度为O(m*n),空间复杂度为O(1)#include #include #include void LeftShiftOne(char *str,int n){ char tmp=str[0]; int i; for (i=
2016-09-26 19:15:10 379
原创 第12课第6节 字符设备驱动程序之异步通知
一.知识点0.目标:异步通知:当按键是驱动主动提醒测试程序,用信号signal实现1.前面学了 查询 中断 POLL 三种字符设备驱动 查询 消耗太多CPU资源 中断 如果一直不按按键的话测试程序的read会一直等 POLL 限时检测,超过时间不按键自动退出 上面三种都是应用程序主动去read2.singal.c文件的使用(信号signal
2016-06-23 18:56:39 440
原创 第12课第4.3节 字符设备驱动程序之中断方式的按键驱动_编写代码
一.知识点request_irq()这个函数会将引脚配置为中断引脚第一个参数:是中断号,IRQ_EINT0是宏第二个参数:是中断处理函数第三个参数:中断触发方式IRQT_BOTHEDGE是宏第四个参数:随便起个名字第五个参数:卸载中断时用到的参数二.驱动代码#include #include #include #include #include #in
2016-06-23 18:17:44 562
原创 第12课第4.2节 字符设备驱动程序之中断方式的按键驱动_Linux中断处理结构
1.ARM中断实现和驱动中断实现的对比 板子实现中断:①分辨是哪一个中断 ②调用处理函数 ④清中断2.注册中断程序 request_irq(irq中断号,hander处理函数,flags触发方式,name名字,dev_id) 分配一个irqaction结构 把这个结构放入irq_desc[irq]的action链表 设
2016-06-23 18:15:32 371
原创 第12课第4.1节 字符设备驱动程序之中断方式的按键驱动_Linux异常处理结构
1.按键中断流程 ①按键按下 ②CPU发生中断,跳转到异常向量入口执行 ③b(跳转) 某个函数 这个函数执行如下内容 1.保存中断的现场2.执行中断处理函数3.恢复现场2.ARM架构CPU异常向量基址是0x00000000,也可以是0xffff0000(虚拟地址),linux内核使用后者3.void _init trap_init(vo
2016-06-23 18:13:27 434
原创 第12课第3节 字符设备驱动程序之查询方式的按键驱动程序
一.按键驱动程序代码#include #include #include #include #include #include #include #include #include #include static struct class *seconddrv_class;static struct class_device *seconddrv_class_dev;
2016-06-14 19:02:30 290
原创 第12课第2.3节 字符设备驱动程序之LED驱动程序_操作LED
一.驱动代码#include #include #include #include #include #include #include #include #include #include /*建立major组设备号对应的设备节点*/static struct class *firstdrv_class;//一个类static struct class_device
2016-06-14 18:31:53 376
原创 第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进
0.基础知识内核使用三种数据结构表示打开的文件:1.进程级的文件描述符表 每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不 同的进程打开也可以在同一个进程中被多次打开。系统为每一个进程维护了一个文件描述符表,该表的值都是从0 开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向
2016-06-06 14:48:24 567
原创 第12课第2.1节 字符设备驱动程序之LED驱动程序_编写编译
一.开始写驱动的思路1.入口函数(驱动从哪里开始执行)普通C代码的入口函数是mani(),而驱动的入口函数格式是static int 名字_init(void)例子:static int first_drv_init(void)2.修饰入口函数(我怎么才知道哪个是入口函数)module_init(名字_init);//本质是定义一个结构体,这个结构体里面有一个指向入口函数(名字
2016-06-06 14:38:00 534
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人