7 小C菜鸟

尚未进行身份认证

我要认证

一蓑烟雨任平生

等级
TA的排名 20w+

7 重载重写重定义

一、重载(overload)指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。(1)相同的范围(在同一个作用域中) ;(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。(5)返回值可以不同;二、重写(也称为覆盖 override)是指派生类重新定义基类的虚函数,特征是:(1)不在同一个作用域(分别位于派生类与基类) ;(2)函数名字相同;(3)参数相同;(4)基类函数必须有 virtual 关键字,不能有 static 。(5)返

2020-06-29 11:31:03

2.转载 QT插件实现

1.转载声明:https://www.jianshu.com/p/4498015031042.接口的定义//step 1 定义接口class RegExpInterface{public: virtual ~RegExpInterface() {} virtual QString regexp(const QString &message) = 0;};// step 2// 声明接口// 使用 Q_DECLARE_INTERFACE 宏,是为了让Qt元对象系统知

2020-06-28 11:18:44

5.KObject

转载声明:http://blog.chinaunix.net/uid-23253303-id-3923995.html1.介绍kobject, kset, ktype之间的关系:linux 设备驱动模型应用了面向对象的思想,其中,kobject是最基本的基类,其他数据结构都是其派生的产物,通过将kobject嵌入到各个数据结构中,实现了类似的继承关系。举例来说kobject就像是一个普通人,通过额外赋予他不同的职务和工具,使他成为了不同类型的人,比如餐厅的服务员,餐厅的领班等。kobject将各个派生

2020-06-24 11:31:41

4.poll接口

1.poll原理poll用来做什么,就是用于在应用层select时候,驱动检查有没有数据可以读的函数。在很多函数里面都要实现。目的就是告诉应用层数据到了。当select时,是否直接返回,还得取决于传入的fd的属性,如果属性是阻塞型,会使用驱动的poll函数做检查,有数据就会返回相应的掩码,如果没有,那么select就在会阻塞,当驱动层有数据到来时,会再一次的调用poll函数做检查,如果有数据了,那么立马会唤醒阻塞的进程或者线程。那么select就会返回。如果不阻塞,当poll检查没有数据时,会立

2020-06-23 18:11:21

转载:Linux字符设备中的两个重要结构体(file、inode)

转载声明:http://blog.sina.com.cn/s/blog_72605ba50102xk9r.html1.简介一般而言在驱动程序的设计中,会关系 struct file 和 struct inode 这两个结构体。用户空间使用open()系统调用函数打开一个字符设备时( int fd = open(“dev/demo”, O_RDWR) )大致有以下过程:1.在虚拟文件系统VFS中的查找对应与字符设备对应 struct inode节点;2.遍历字符设备列表(chardevs数组),根

2020-06-23 15:19:50

Linux内核常用头文件

1、体系结构相关头文件子目录include/asm这些头文件主要定义了一些与CPU体系结构密切相关的数据结构、宏函数和变量。共4个文件。<asm/io.h>:I/O头文件,以宏的嵌入汇编程序形式定义对I/O端口操作的函数。<asm/uaccess.h> /* copy_to_user, copy_from_user */<asm/memory.h>:内存拷贝头文件,含有memcpy()嵌入式汇编宏函数。<asm/segment.h>:段操作头

2020-06-23 13:29:58

1. QT在linux开发板上显示中文

如果在开发板上显示中文为乱码,可以在QApplication实例之前,添加#include <QTextCodec>QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));

2020-06-23 11:37:56

3.模块依赖EXPORT_SYMBOL

1.依赖的模块#include <linux/init.h>#include <linux/module.h>void depend_func(void){ printk("depend func\n");}EXPORT_SYMBOL(depend_func);static int __init depend_module_init(void){ printk("depend init\n"); return 0;}static void _

2020-06-22 19:31:00

2.带参数的可加载模块

1. 定义模块参数的方法:module_param(name, type, perm);其中,name:表示参数的名字; type:表示参数的类型; perm:表示参数的访问权限;2. 数组类型模块参数的定义:用逗号间隔的列表提供的值;声明一个数组参数:module_param_array(name, type, num, perm);其中,name:表示数组的名字; type:表示参数的类型; num :表示数组中元素数量; perm:表

2020-06-22 19:14:43

1. 简单的可加载模块

module_init(**_init); // 模块初始化接口module_exit(**_exit); // 模块卸载接口#include <linux/init.h>#include <linux/module.h>static int __init simple_module_init(void){ printk("simple module init.\n"); return 0;}static void __exit simple_mo

2020-06-22 18:46:14

转载:fasync的总结

转载声明: https://blog.csdn.net/u010481276/article/details/51093800我们知道,驱动程序运行在内核空间中,应用程序运行在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时 候,我们希望通知用户程序设备已经ok,用户程序可以读取了,这样应用程序就不需要一直查询该设备 的状态,从而节约了资源,这就是异步通知。相关函数原型:int fasync_helper(struct inode *inode, struct file *fil

2020-06-22 13:49:00

转载:Linux内核开发之阻塞非阻塞IO----轮询操作

转载声明: https://www.cnblogs.com/hanyan225/archive/2010/10/13/1850497.html使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问,这两个系统调用最终又会引发设备驱动中的poll()函数被执行,所以我们的问题就集中到了如何编写设备驱动中的poll()函数就可以了。二话不说,先来看看设备驱动中的poll()函数原型:unsigned int (*poll)(struct file *fi

2020-06-22 11:56:51

linux的I2C驱动——ID匹配

转载: https://blog.csdn.net/Smile_Smilling/article/details/76769201以下基于3.0内核版本的源码进行讲解,驱动代码路径为drivers/misc/eeprom/at24.c。I2C核心代码路径为drivers/I2C模块入口module_init(at24_init);module_init()是一个宏定义,位于include/linux/init.h。如果将驱动编译入内核,定义如下:#define device_initcall(

2020-06-17 16:16:31

打开linux内核中dev_dbg的开关

转载:https://www.cnblogs.com/dakewei/p/10082432.html比如要打开某个驱动中的dev_dbg,那么需要在驱动文件.c中这些行"<linux/device.h>“或者”<linux /platfom_device.h>"(device.h包含platform_device.h)之前定义DEBUG如:drivers/mtd/spi-nor/spi-nor.c第一步:#include <linux/module.h>#def

2020-06-17 11:14:18

1,proc学习笔记--利用proc 实现内核和用户态交换数据

转载声明:参考该博客 https://www.cnblogs.com/ziziwu/archive/2011/10/20/2218975.html最近写程序需要内核得到用户态的参数,比较苦逼幸福的是虽然ioctrl 用不了,可以用proc实现,proc文件系统提供了一种内核和用户态交互的方法。proc文件系统的详细接口看<linux/proc_fs.h>主要需要关注的是这几个函数:struct proc_dir_entry *proc_mkdir(const char *name, st

2020-06-15 15:39:47

6 操作符重载

实现操作符重载: 赋值操作符=, [ ],<<, ==, !=;头文件:#ifndef _MYARRAY_H#define _MYARRAY_H#include <iostream>using namespace std;class MyArray{private: int length; int* space; ...

2020-02-03 23:18:42

5 拷贝构造函数的调用时机

C++拷贝构造函数的调用时机有4种:class Test{private: int a; int b; public: Test(int _a, int _b) { a = _a; b = _b; } Test...

2020-02-02 16:17:42

1 函数指针知识点

1 声明一个函数类型#include <cstdlib>#include <iostream>using namespace std;void myprint(int a, int b){ cout << a << " " << b << endl;}typedef void (func)(int...

2020-02-01 15:31:22

4 const引用知识点

1 指针与引用int val = 20;int& valr = val;int* p = &val;int* &valr2 = p;cout << &val << endl;cout << p << endl;cout << valr2 << endl;cout <&...

2020-01-31 22:56:01

3 引用的使用

1 引用作为函数形参#include <cstdlib>#include <iostream>using namespace std;struct teacher{ int id; char name[64];};int getmem_1(teacher** t){ teacher* temp = NULL; ...

2020-01-31 22:14:10

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。