自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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课第5节 字符设备驱动程序之poll机制

一.目标测试程序限时检测是否按下按键,若超过时间则退出程序.所以利用poll

2016-06-23 18:32:08 373

原创 第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

原创 第12课第1节 字符设备驱动程序之概念介绍

2016-06-06 13:43:35 558

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除