嵌入式开发完整体系课程(含项目) 扫二维码继续学习 二维码时效为半小时

(171评价)
价格: 598.00元

友元类是可以在一个类中将一个类声明为友元类,

friend class xx;

这样子,就可以直接访问xx类中的成员函数。

友元不是该类中的成员,但是他可以通过兑现个访问类中的私有成员。

友元关系不能被继承。

[展开全文]
王布斯 · 07-01 · 0

当一个友元函数定义在一个类中时,其他类想要调用他,需要进行前项声明操作。前项声明是一种不完全型声明,只需提供类名,无需提供类实现即可。所以功能也很有限。

特点:1.不能定义对象

2.可以用于定义指向这个类型的指针或引用(类似于链表中的next指针,结构体中不可以包含自身的结构体类型变量,但可以包含指向自身结构体类型的指针)

3.用于声明(不是定义),作为形参类型或者函数的返回值类型

[展开全文]
王布斯 · 07-01 · 0

QT的源文件拿到linux系统下,编译的步骤是,先在命令行输入qmake -project生成一个.pro的工程文件,在qmake生成一个Makefile文件,在make就可以生成可执行文件。

[展开全文]
王布斯 · 07-01 · 0

如果一个类只能创建一个对象时,就是所谓的单实例模型,可以将他的默认构造等一系列函数写成私有属性,在公有属性中加入static修饰的初始化和回收资源函数。因为static修饰的成员属于类也属于对象,对象没有创建之前就已经存在,类就可以去调用static成员。

[展开全文]
王布斯 · 06-30 · 0

static修饰的成员函数只能访问static修饰的成员变量,或者调用static修饰的成员函数。

static修饰的属性是整个类共有的。如果有属性是同类共有的,就需要将这个属性声明为static。

[展开全文]
王布斯 · 06-30 · 0

const修饰一个成员函数时,该函数不能在函数体中修改任何变量,且该函数不能调用非const修饰的其他函数。

const修饰一个对象调用函数时只能调用const成员函数,且const对象不能被修改。

[展开全文]
王布斯 · 06-29 · 0

得到当前时间可以使用time和localtime函数

system("cls");调用这个函数就可以实现清屏w

setw(2)可以设置cout输出的变量用两个字符来填充,如果不够两个字符,另外一个字符用setfill来设置。比如:cout<<setfill('0')<<setw(2)<<m_hour<<":"<<....

[展开全文]
王布斯 · 06-29 · 0

gec210开发板

三星s5pv210  cotex-A8  ARM-V7架构

512M-DRAM 512M-FLASH

 

开发板与电脑的连接

电源线、串口线、

 

启动方式:1.nand-boot

                 2.usb-boot

[展开全文]

string类是C++提供的标准类模板,

string str;

再使用cin>>str是绝对安全的,

[展开全文]
王布斯 · 06-23 · 0

linux下的nm工具可以查看可执行文件中的代码段信息。

grep命令可以查找文件中的想要查找的字符串

extern "C"

{

#include "test.h"

}

extern的作用是让里面的内容不发生倾轧行为,是为了C++文件调用C语言库时使用的,C中的函数名不允许发生倾轧。

[展开全文]
王布斯 · 06-21 · 0

1.cin等价于C语言中的scanf,也可以理解为是stdin

2.endl等价于‘\n’

3.cout等价于stdout

4.<<和>>在C++中表示数据的流向

[展开全文]
王布斯 · 06-20 · 0

内核链表头文件中有很多封装好的接口可以使用。

内核链表的本质是大结点中包含一个小的结构体,这个小结构体中是两个next和prev指针。通过这个小结构体中的指针将结点依次连接起来。

遍历内核链表可以使用专门的接口list_for_each,该函数可依次遍历内核链表中的小结构体,遍历完后需要调用 list_entry函数来找到大结点的地址,然后通过大结点访问里面的数据。

list_move_tail是将第一个参数中小结构体指向的结点移到第二个参数小结点指向的结点的前边,

[展开全文]
王布斯 · 06-16 · 0

宏INADDR_ANY的作用是获得本机的任意一个ip地址。

htonl函数是将文本ip地址转换成二进制长整型。

绑定ip地址时,可以将结构体srvaddr中的成员srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);

Linux中listen(fd, 3)函数的第二个参数,代表最多处理几个连接,可连接个数为n+4,例如3就代表最多能处理7个。

inet_ntop可将二进制ip地址转换成字符串形式,返回值就是字符串。

[展开全文]
王布斯 · 06-13 · 0

server服务器端

1.使用socket函数生成一个socket文件描述符,socket函数的第三个参数一般设置为0

2.bind函数将socket描述符和ip地址以及端口port绑定

3.listen(fd)函数,将socket套接字变成监听套接字

4.accept(fd)函数里的参数是监听套接字,功能是返回一个新的fd',fd'被称为已连接套接字。

5.这时就可以通过read,write函数来读写fd'文件描述符,

6.最后关闭socket文件调用close(fd')或shutdown(fd')函数

client客户端(主动连接,主动挂断)

1.调用socket函数生成一个描述符fd

2.调用connect(fd)函数发送连接请求向服务器,服务器会发送一个回执,客户端再次回复连接成功,就返回一个已连接套接字

3.此时就可以使用已连接套接字的描述符,进行read,write函数进行读写操作

4.最后close或shutdown掉已连接套接字文件描述符

[展开全文]
王布斯 · 06-13 · 0

signal函数是信号注册函数,可以通过signal提前将目标信号注册执行动作,可以设置为忽略该信号,或者收到该信号后去执行某个函数。

sigprocmask函数是设置阻塞掩码的,就是可以设置阻塞某个信号。参数中第二个参数是信号集,说明可以阻塞多个信号,只要放在信号集中就可以,该函数也可以设置不阻塞信号,只需要修改第一个参数中的宏即可。

信号集的设置可以使用信号集操作函数簇,第一步清空信号集sigemptyset,然后调用sigaddset将指定信号添加到信号集中。

sigqueue函数也是用来发送信号的,只是可以携带更多发送者的信息。sigqueue和sigaction是配套使用的。相当于kill和signal的增强版。

sigaction也是注册函数,功能和signal一样,只不过注册的是f'函数,是带有额外信息的信号触发函数。

[展开全文]
王布斯 · 06-13 · 0

1. kill -l可以查看系统中所支持的信号

2.信号中从1-31所有的信号都是有特殊含义的(也叫非实时信号或者不可靠信号)(信号之间没有优先级,是可以嵌套使用的)(处理这一类的信号时,如果系统正在处理一个信号,此时有同种类型的信号又发送过来时,系统会自动忽略掉,只当又发送过来的同样的信号不存在)

3.后面的34-64之间的信号没有特殊含义(也叫可靠信号或者实时信号)(实时信号是有顺序的,按次序接收,不嵌套,按顺序处理不会被打断)

4.在shell命令中给一个进程发信号的命令是:kill -s 信号名(或者是信号的值,比如9) 进程PID号

5.ps -ef查看当前进程信息

6.如果同时开启了好多个同样的进程,可以使用命令killall 进程名    来同时杀死多个进程

7.sigset是一个信号的集合

sourceinsight软件中按ctrl键加鼠标左键,可以进入变量的定义中去

按alt+,(逗号)可以返回之前界面。

linux中查询信号的默认动作,shell命令是man 信号编号(如9) signal。

[展开全文]
王布斯 · 06-11 · 0

vim中按shift+k,会跳转到一个同名的变量或函数的man手册中。

创建有名管道的函数接口是mkfifo("file_name",mode);

创建完毕后使用open函数打开就可使用。

判断是否已经创建有有名管道文件的函数是access(const char *pathname, int mode);

[展开全文]
王布斯 · 06-10 · 0

exec函数簇的功能是父进程中调用,当需要子进程执行的代码量很大时,父进程中并不执行这些代码,但需要包含这些以复制给子进程,造成空间浪费,这时可以调用exec函数,参数中传入想要执行的程序或者路径,子进程就会照着这个路径去找执行程序,父进程中就不需要写太多多余的代码,导致空间浪费。

execl函数中的参数,第一个是可执行程序的路径,第二个是参数,执行程序本身就是参数,所以需要再写一遍,最后要写上NULL。函数传参的基本方式就是,argv[0] argv[1](如果有的话) NULL。

execv函数中的参数,是提前将传参的参数封装到一个数组中,将数组名传递给execv函数。

execlp函数可以执行shell命令,p是环境变量path的意思。

[展开全文]
王布斯 · 06-10 · 0

可执行程序运行时,输入命令./test程序会运行在前台进程组,输入命令./test &时,程序会运行在后台进程组,即后台运行,程序后台运行时,shell终端发出的命令比如ctrl+c是影响不了test进程运行的,但是计算机断电或者关闭终端,这种后台进程是可以被杀掉的

ps -ef命令可以查看当前的进程执行情况

使用精灵进程(守护进程)的目的是为了一个进程,需要他持续不断的运行,尽管终端关闭,他也能在后台运行,满足工作需求

[展开全文]
王布斯 · 06-10 · 0

1.进程僵尸是指进程退出后,他占用的资源并没有被立即释放掉。之所以不立即释放资源是因为子进程需要发送信号给他的父进程报告他是怎么死的,以及他的任务完成的情况,他占用的资源等信息保留在task_struct结构体中。子进程只有死亡状态时他占用的资源才会被回收释放掉。没有释放之前叫僵尸态。

2.父进程在子进程进入僵尸态后调用wait/waitpid函数来对子进程收尸,执行的操作有:读取里面的数据获得子进程任务执行的状况;获得子进程的退出状态;同步父子进程

[展开全文]
王布斯 · 06-10 · 0