c及c++
文章平均质量分 77
huabiaochen
you smile i smile
展开
-
Linux-pthread设置线程优先级
设置线程优先级的函数:int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)它主要用于设置线程的调用策略和优先级。参数说明:1. target_thread是使用pthread_create所获得的线程ID。2. 线程的调度有三种策略:SCHED_OTHER、SCHED_RR和SCHED_FIFO。Policy用于指明使用哪种策略。下面...原创 2021-01-19 15:29:19 · 3455 阅读 · 0 评论 -
线程锁:互斥锁、自旋锁、读写锁、条件变量、信号量
先看一段代码#include <stdio.h>#include <stdlib.h>#include <pthread.h> //创建两个线程,分别对两个全变量进行++操作,判断两个变量是否相等,不相等打印int a = 0;int b = 0;// 未初始化 和0初始化的成员放在bbspthread_mutex_t mut...原创 2020-03-21 22:51:26 · 430 阅读 · 0 评论 -
linux下最简单的ftpget ftpput 源代码
/*FtpGetRun*/ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> ...原创 2020-01-06 14:31:42 · 783 阅读 · 0 评论 -
预处理器标识#error的目的是什么
停止编译并显示错误信息编译程序时,只要遇到#error就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。下面举个例子:程序中往往有很多的预处理指令#ifdefXXX...#else#endif当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了XXX...原创 2019-12-21 15:30:35 · 835 阅读 · 0 评论 -
int *const && int const * && const int *的区别
ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰比如:const int a int const a以上两种声明方式是一样的,我们不需要考虑const和int的先后顺序,按照你理解的方便的一中方式进行应用。 因为const和int的顺序先后并不影响结果,因此 int const * && const int *这...原创 2019-02-27 11:43:07 · 422 阅读 · 0 评论 -
UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧:一、类的属性的表示方式在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和email这3个属性,以及modifyInfo()方法。...原创 2018-09-19 15:39:11 · 147 阅读 · 0 评论 -
两点经纬度之间的距离
#include <stdio.h>#include <math.h>#define PI 3.1415926#define EARTH_RADIUS 6378.137 //地球近似半径// 求弧度double radian(double d){ return d * PI / 180.0;...原创 2018-06-13 14:31:43 · 227 阅读 · 0 评论 -
vector使用
一、什么是vector?向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算...原创 2018-05-21 22:14:44 · 229 阅读 · 0 评论 -
23种设计模式 c++
设计模式(Design Patterns)是一套被反复使用、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,设计模式是软件工程的基石。项目中合理的运用设计模式可以解决很多问题,每种模式在现实中都有相应的原理与之对应,每一个模式描述了一个我们周围不断重复发生的问题,以及该问题的核心解决方案。一、设计模式的分类创建型,5种:...原创 2019-04-15 23:02:58 · 468 阅读 · 0 评论 -
友元 c++
友元(友元函数、友元类和友元成员函数) C++ 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的。例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。 友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现...原创 2019-05-08 10:33:50 · 387 阅读 · 0 评论 -
float x 与“零值”比较的if语句
写出float x 与“零值”比较的if语句请写出 floatx 与“零值”比较的 if 语句:const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。EPSINON应该是...原创 2019-08-28 10:12:04 · 4158 阅读 · 0 评论 -
大小端
我们使用的linux终端一般都是小端模式大端就是数据的高字节存在内存的低地址,低字节存在内存的高地址小端就是数据的高字节存在内存的高地址,低字节存在内存的低地址#大小端判断程序 #include <stdio.h> typedef enum { false, true }bool; typedef union { ...原创 2019-09-11 10:42:50 · 100 阅读 · 0 评论 -
分离线程
未分离线程在我们使用默认属性创建一个线程的时候,线程是 joinable 的。 joinable 状态的线程,必须在另一个线程中使用 pthread_join() 等待其结束, 如果一个 joinable 的线程在结束后,没有使用 pthread_join() 进行操作, 这个线程就会变成"僵尸线程"。每个僵尸线程都会消耗一些系统资源, 当有太多的僵尸线程的时候,可能会导致创建线程失败。下...原创 2019-09-11 16:57:07 · 270 阅读 · 0 评论 -
MD5
MD5.h#ifndef _MD5_H_#define _MD5_H_#define S11 7#define S12 12#define S13 17#define S14 22#define S21 5#define S22 9#define S23 14#define S24 20#define S31 4#define S32 11#define S33 16#define S34 23...原创 2018-04-08 16:40:35 · 142 阅读 · 0 评论 -
校验和
校验和是用于检测传输过程中可能产生的错误,将其置于数据后,随数据一同发送,接收端通过同样的算法进行检查,若正确就接受,错误就丢弃校验和C源代码:反校验:char _check_sum(const unsigned char *data, int len){ int i = 0; unsigned char sum = 0; if(len <= 0) { return TR_FAILURE...原创 2018-03-13 11:34:22 · 1342 阅读 · 0 评论 -
进出多边形区域、圆形判断
typedef struct tagST_POINT { int x; int y; } ST_POINT; /** * 功能:判断点是否在多边形内 * 方法:求解通过该点的水平线(射线)与多边形各边的交点 * 结论:单边交点为奇数,成立! * 参数:p 指定的某个点 ptPolygon 多边形的各个顶点...原创 2018-01-28 11:58:52 · 461 阅读 · 0 评论 -
C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放 1.vector的内存增长vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此转载 2017-06-27 14:30:59 · 365 阅读 · 0 评论 -
回调函数
函数指针作为某个函数的参数及定义函数指针(回调函数)转载于:http://blog.csdn.net/vlily/article/details/7244682转载于:http://blog.csdn.net/shengnan_wu/article/details/8116935转载于:http://blog.csdn.net/callmeback/ar原创 2017-07-15 23:45:13 · 202 阅读 · 0 评论 -
select函数
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: [cpp] view plain copy#include #include int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_se原创 2017-08-10 23:56:11 · 403 阅读 · 0 评论 -
C语言MD5源码及实例
C语言 MD5源码md5c.h:?123456789101112131415161718192021222324/* POINTER defines a generic pointer type */ typedefunsigned cha原创 2017-08-18 23:22:18 · 6753 阅读 · 0 评论 -
linux C 获取网关代码实现
源码:#include #include #include #include #include #include #define BUFSIZE 8192 struct route_info{ u_int dstAddr; u_int srcAddr; u_int gateWay;原创 2017-08-22 14:05:40 · 6283 阅读 · 1 评论 -
ntohs, ntohl, htons,htonl的比较和详解
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long int" 32Bytes ntohl()--"Network to Host Long原创 2017-09-04 14:52:12 · 313 阅读 · 0 评论 -
select实现的睡眠函数
/*精确度为0.001秒的sleep函数*/void m_sleep(unsigned int secs){ struct timeval time; time.tv_sec=secs/1000; time.tv_usec=(secs*1000)%1000000; select(0,NULL,NULL,NULL,&time);} //例如:调用s原创 2017-09-13 10:58:43 · 3666 阅读 · 0 评论 -
网关的MTU检测
如何检测网关的MTU在本机打开dos窗口,执行: ping -f -l 1472 192.168.0.1 其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。 如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。 如果出现: Packet needs to be fragmented but DF set原创 2017-09-13 11:14:59 · 2971 阅读 · 0 评论 -
时间换算函数
1 #include 2 3 char *asctime(const struct tm* timeptr); //将结构中的信息转换为真实世界的时间,以字符串的形式显示; 4 5 char *ctime(const time_t *timep); //将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样; 6 7 double di原创 2017-09-14 00:15:29 · 1017 阅读 · 0 评论 -
字节对齐的方法
一、__attribute__选项 我们可以按照自己设定的对齐大小来编译程序,GNU使用__attribute__选项来设置,比如我们想让刚才的结构按一字节对齐,我们可以这样定义结构体 struct stu{ char sex; int length; char name[10]; }__attribute__ ((aligned (1))原创 2017-09-15 14:53:48 · 228 阅读 · 0 评论 -
BCD码和十进制的相互转换
BCD码和十进制的相互转换static unsigned char bcd_decimal(unsigned char bcd){return bcd-(bcd >> 4)*6;}static unsigned char decimal_bcd(unsigned char decimal){return (unsigned char) (原创 2017-09-12 21:55:01 · 1898 阅读 · 0 评论 -
校验和
1、校验和是用于检测传输过程中可能产生的错误,将其置于数据后,随数据一同发送,接收端通过同样的算法进行检查,若正确就接受,错误就丢弃校验和C源代码:unsigned short checksum(unsigned char *buf,int len){ unsigned int sum=0; //1 unsigned s原创 2017-12-04 21:54:39 · 5507 阅读 · 0 评论 -
点阵放大算法
http://blog.csdn.net/sddsighhz/article/details/39290703这两天在调打印,在网上找各种提取字模相关的算法,但是一般字模取出来后的数据都是横向的,在打印字上打出来旋转了90°,没办法,只好转换一下了。先说一下取字模数据的算法(本人C写的不多,只能算初级,见笑了):下面一段摘自网上:原创 2017-12-14 19:45:11 · 4377 阅读 · 0 评论 -
PELCO协议
监控行业通信协议应用最广的协议就是美国PELCO-P,PELCO-D协议,可以说国内大部分控制设备,包括嵌入式录像机,监控视频采集卡软件,各种控制键盘,PC机调试研究均有此协议。其中通过各个行家又繁衍出各种版本。此文讲解“正宗”的美国PELCO-P\D协议,最后也讲解一下最新版本及其他厂家的协议。一、PELCO协议1、PELCO协议据本人了解,有PELCO-P\原创 2017-12-08 12:11:33 · 2946 阅读 · 2 评论 -
面向过程和面向对象的理解
当我们习惯了面向过程编程时,发现在程序过程中到处找不到需要面向对象的地方,最主要的原因,是思维没有转变。 我们程序员通常在拿到一个需求的时候,第一个反应就是如何实现这个需求,这是典型的面向过程的思维过程,而且很快可能就实现了它。 而面向对象,面对的却是客体,第一步不是考虑如何实现需求,而是进行需求分析,就是根据需求找到其中的客体,再找到这些客体之间的联系。因此面向过程和...原创 2017-05-17 16:34:48 · 330 阅读 · 0 评论