
c
文章平均质量分 53
Feng_0321
这个作者很懒,什么都没留下…
展开
-
scons的使用
1、支持多目录编译(类似于CmakeLists.txt),将多个目录的串起来Sconconstruct在最顶层SConscript文件可以层层包含Sconscript([‘common/SConscript’,‘plugins/Sconscript’])在common下:Sconscript([‘src/SConscript’,‘include/SConscript’])在plugins下:Sconscript([‘display/SConscript’,‘system/SConscript’原创 2021-01-02 18:36:39 · 1339 阅读 · 0 评论 -
C/C++ 常用类,函数库
C/C++ 常用类,函数库CArchive类:用于二进制保存档案CBitmap类:封装Windows的图形设备接口(GDI)位图CBrush类:封装图形设备接口(GDI)中的画刷CButton类:提供Windows按钮控件的功能CByteArray类:该类支持动态的字节数组CCmdUI类:该类仅用于ON_UPDATE_COMMAND_UI处理函数中CColorDialog类:封装标准...转载 2019-02-24 23:12:26 · 601 阅读 · 0 评论 -
linux网络基础知识1
1、OSI系统七层模型:物——物理层(双绞线,光纤)数——数据链路层(数据的传输和错误检测)网——网络层(为数据包选择路由器)传——传输层(提供端对端的接口)会——会话层(解除或建立与其他节点的联系)表——表示层(数据的加密,代码转换)应——应用层(文件传输、电子邮件,文件服务,虚拟终端)2、IP四层模型数据链路层——以太网帧协议网络层——IP协议传输层——TCP/UDP传输...原创 2019-03-24 12:42:11 · 766 阅读 · 0 评论 -
多进程——孤儿进程或者僵尸进程解决方法
多进程中,难免会出现父进程先于子进程退出或者子进程先于父进程退出,为此分为两种情况,若父进程先于子进程先退出,则子进程相当于孤儿进程;若子进程先于父进程先退出,则子进程相当于僵尸进程。fork在 <unistd.h>文件中定义如下:使用pid_t fork(void)函数创建子线程,若fork返回为-1,则调用失败;若fork返回为0,相当于是子线程;若fork大于0,则为父进程。...原创 2019-04-10 14:35:25 · 1149 阅读 · 0 评论 -
多线程——主线程和子线程退出关系
分清两个概念主线程和当前进程的关系:当前进程由主线程和若干个子线程组成。若当前进程退出后,子线程也会跟着一起退出;若只是主线程退出,仍要分两种情况分析:实际上主线程退出后子线程的状态依赖于它所在的进程,如果进程没有退出的话子线程依然正常运转。如果进程退出了,那么它所有的线程都会退出,所以子线程也就退出了。查看进程、线程方式进程:ps -elf | grep "对应的文本内容"ps au...原创 2019-04-10 17:16:23 · 4054 阅读 · 0 评论 -
HTTP长连接和短连接
一、概念HTTP长连接:客户端和服务器建立一次连接之后,可以在这条连接线上进行多次请求/响应操作。一般会设置过期时间,也可以不设置。步骤如下:连接->数据传输->保持连接(心跳)->数据传输->保持传输(心跳)->…->关闭连接HTTP短连接:客户端和服务器进行一次HTTP请求/响应之后,就关闭连接。所以一次请求/响应后就需要重新建立连接。步骤如下:连接...原创 2019-04-20 18:04:45 · 751 阅读 · 0 评论 -
linux网络编程基础知识2
一、火狐浏览器若遇到访问超过普通端口80时,出现此地址访问受限的提示的话,可修改火狐浏览器的about:config,新建->字符串,输入network.security.ports.banned.override,取值范围设置为0~65535(简单方法,取全范围)二、循环遍历目录头文件添加#include <dirent.h>#incldue <stdded.h&...原创 2019-04-17 19:45:05 · 226 阅读 · 0 评论 -
linux信号和信号量(转)
一、EAGAIN信号在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读,...转载 2019-04-17 19:46:14 · 1681 阅读 · 0 评论 -
CMake基本操作
CMakeLists.txt的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,参数和变量是大小写相关的,但,推荐全部使用大写指令。符号”#”后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格或分号进行间隔。变量使用${xxx}引用。常用cmakelists.txt文件构建cmake。如果工程存在多个目录,需要确保每个要管理的目录都存在一个CMakeList...原创 2019-05-02 10:30:46 · 370 阅读 · 0 评论 -
ubuntu系统与linux通过samba远程登录,用SourceInsight查看源代码(转)
一、samba下载1、ubuntu上samba安装:sudo apt-get install sambasudo apt-get install smbfssudo apt-get install samba4(实际可不安装)按提示安装完成2、将需要共享的用户目录权限设置为任何人都可读/写/运行:chmod 777 /home/用户名/目录3、添加一个samba的用户以及密码su...转载 2019-04-20 14:11:30 · 1520 阅读 · 0 评论 -
linux启动运行过程
一、linux系统开机启动过程1、开机自检,加载BIOS;2、读取MRB;3、Boot Loader Grub引导菜单;4、加载kernel内核;5、init进程根据inittab文件夹设定运行级别;6、init进程执行rc.sysinit;7、启动内核模块;8、执行不同级别的脚本程序;9、执行/etc/rc.d/rc.local;10、执行/bin/login程序,启动min...转载 2019-05-07 12:23:35 · 422 阅读 · 0 评论 -
使用linux的ICMP实现ping功能
1.ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方。ICMP协议是IP层的一个协议,但是由于差错报告在发送给报文源发方时可能也要经过若干子网,因此牵涉到路由选择等问题,所以ICMP报文需通过IP协议来发送。ICMP数据报协议由ICMP报头和IP报文封装而成。 2.IP层协议是一种...原创 2018-07-03 00:58:10 · 2753 阅读 · 0 评论 -
字(word)、字节(byte)、位(bit)关系
字 word 字节 byte 位 bit 字长是指字的长度1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit) 一个字的字长为16 一个字节的字长是8bps 是 bits per second 的简称。一般数据机及网络通讯的传输速率都是以「bps」为单位。如56Kbps、100.0Mbps 等等。 Bps即是Byte per second转载 2018-01-21 22:40:32 · 4322 阅读 · 0 评论 -
visual studio(VS)工程重命名
步骤一:在vs工程选择替换全部 步骤二:在vs工程属性修改所需的程序集 步骤三:用记事本打开工程.vcprj和.sln里查找替换工程名为你要改的原创 2017-02-18 10:04:48 · 2218 阅读 · 0 评论 -
strcpy的使用--易错点
strcpy在C中最常见,可是真正用时才知道会遗漏很多。strcpy(char *str1,char *str2)将str2字符串复制到str1,同时也将str2结束符复制到str1中。所以总得来说,str1的字符长度比str2大一。例子:char *str2="Hello World!";char *str1=(char *)malloc(sizeof(str2)+1);转载 2016-09-22 18:07:15 · 770 阅读 · 0 评论 -
对一个未做声明的地址进行访问
例子一:int main(char argc,char* argv[ ]){char *p;p=0x080000;*p=3; //1return 0;}程序在1处奔溃,因为p的地址是任意分配的,不知道系统是否已经使用这个地址,这么做是危险的。正确的做法:int main(char argc,char* argv[ ]){char *p,i原创 2016-09-22 18:33:35 · 444 阅读 · 0 评论 -
面试易错点
一、char str1[]=”abc”; char str2[]=”abc”; char *str3=”abc”; char *str4=”abc”; str1[]和str2[]是不相同的,*str3和*str4是相同的,str1[]和str2[]是储存在堆上,*str3和*str4在常量区,这两个指针指向的是同一地址 编译器认为p1指向的“abc”和p2原创 2016-10-08 23:24:29 · 418 阅读 · 0 评论 -
算法2.5:链式A+B
题目描述有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。测试样例: {1,2,3},{3,2,1} 返回:{4,4,4}思路分析:因为链表中第一个是个位,以此类推,当两个链表需要考虑:当个位相加时,原创 2016-09-23 12:55:48 · 344 阅读 · 0 评论 -
生疏的两种排序算法——堆、归并排序
常用的内部排序方法有:交换排序(冒泡排序、快速排序)、选择排序(简单选择排序、堆排序)、插入排序(直接插入排序、希尔排序)、归并排序、基数排序(一关键字、多关键字)。接下来就是堆排序: 堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=转载 2016-10-10 02:58:43 · 437 阅读 · 0 评论 -
10.9笔试心得
果然c基础还是不大好,一下子就被笔试的刷刷刷了。1、printfprintf和#define都不是c语句,printf是库函数,#define是预编译命令2、堆和归并3、符号优先级4、图的最小代价树5、结构体的一些概念6、c语言中有多少种基本类型7、链表的插入删除 (头插和尾删除哪个快)8、负数在计算机储存以补码的形式如:11110111 对应整型-9原创 2016-10-10 00:54:08 · 365 阅读 · 0 评论 -
C语言中memset函数详解
功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 用 法: void *memset(void *s, char ch, unsigned n); 程序例子: #include <string.h> #include <stdio.h> #include <memor转载 2016-09-24 12:32:03 · 488 阅读 · 0 评论 -
字符串数组操作函数
一、strstr函数: 函数原型:char *strstr(char *haystack, char *needle) 参数说明:haystack为一个源字符串的指针,needle为一个目的字符串的指针。 函数功能:从字符串haystack中寻找needle第一次出现的位置,但是该函数不比较结束符NULL。 返回说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。二、原创 2016-09-24 15:49:43 · 667 阅读 · 0 评论 -
算法2.6回文链表
题目描述:请编写一个函数,检查链表是否为回文。 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。测试样例: {1,2,3,2,1} 返回:true {1,2,3,2,3} 返回:false思路分析:因为使用的是链表,只能查找前面的元素,不能往后查找。因此可以选用链表+栈的方式存储。1、首先,找到前面一半的元素,存到栈中 2、再比较栈和后续链表是否相等原创 2016-09-25 00:44:57 · 309 阅读 · 0 评论 -
笔试难点(完美)
1、static_cast、dynamic_case、reinterpret_cast、const_cast比较C风格转换是“万能的转换”,但需要程序员把握转换的安全性,编译器无能为力;static_cast最接近于C风格转换,但在无关类指针转换时,编译器会报错,提升了安全性;dynamic_cast要求转换类型必须是指针或引用,且在下行转换时要求基类是多态的,如果发现下行转换不安全,dynamic原创 2016-09-29 21:00:51 · 332 阅读 · 0 评论 -
17号刷题易错
1、switch易错 switch(表达式) { case 常量表达式1:语句1; break; …. case 常量表达式n:语句n; break; default:语句;break; } 1.default就是如果没有符合的case就执行它,default并不是必须的. 2.case后的语句可以不用大括号. 3.switch语句的判断条件可以接受原创 2016-10-17 08:43:25 · 429 阅读 · 0 评论 -
在不使用额外空间,交换两个数
方法一:int a,b;a=a^b;b=a^b;a=a^b;方法二:int a,b;a=a+b;b=a-b;a=a-b;方法一相对于方法二更好,因为方法二会有越界,溢出现象原创 2016-09-22 17:57:18 · 530 阅读 · 0 评论