C++
nicholas_dfx
南京--电子工程师、软件工程师、控制工程师,物联网,工控,工业互联,嵌入式
展开
-
Linux下C++获取文件的大小和最近修改时间
Linux下获取文件的大小(byte)和最近修改时间(时间是指从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数)#include<stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int main(){ FILE * fp; i...原创 2018-07-10 13:39:30 · 9623 阅读 · 3 评论 -
排序算法之直接插入排序
1 核心思想:插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 ,如此重复,直至完成序列排序。2 算法分析: 1. 从序列第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,设为待插入元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于待插入元素,将该元素移到下一位置。 3. 重复步骤2,直到找到已排序的元素小于或者等于待排序元...原创 2019-02-28 14:50:09 · 3029 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3,2,1,0]这种倒序序列,数组末端的0要回到首位置很是费劲,比较和移动元素均需n-1次。而希尔排序在数组中采用跳跃式分组的策略...原创 2019-02-28 14:52:06 · 3036 阅读 · 0 评论 -
排序算法之堆排序
堆排序使用大顶堆,大顶堆的第一个元素是最大值,这样在排序的时候(假设共n个节点),直接将第一个元素和最后一个元素进行交换,然后从第一个元素开始进行向下调整至第n-1个元素。堆排序的步骤分为三步:1、建堆(建大堆)2、交换数据3、向下调整/*******************堆排序***********************/template<class T>...原创 2019-02-28 15:49:55 · 3089 阅读 · 0 评论 -
排序算法之归并排序
归并排序的思路很简单,归并排序包括两个步骤,分别为:第一,分解:分解待排序的n个元素的序列成各具n/2个元素的子序列;第二,合并:合并两个已排序的子序列——这是核心部分!递归版原理如下:1. 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素2. 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素3. 重复步骤2,直到所有...原创 2019-03-01 11:05:01 · 3071 阅读 · 0 评论 -
Wince系统设置开机启动方式--注册表方式
Wince可以通过使用注册表方式设置开启启动;Start Wince_Patch[HKEY_LOCAL_MACHINE\init] "Launch98"="\hard disk2\Data\Patch" "Depend98"=hex:14,00,1E,00,32,00wince自动启动程序设置修改注册表[HKEY_LOCAL_MACHINE\init]“Launc...原创 2019-03-01 13:40:02 · 3770 阅读 · 0 评论 -
设计模式--单例模式C++实现
一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,我们只需要一个实例对象就可以。如果采用全局或者静态变量的方式,会影响封装性,难以保证别的代码不会对全局变量造成影响。考虑到这些需要,我们将默认的构造函数声明为私有的,这样就不会被外部所new了,甚至可以将析构函数也声明为私有的,这样就只有自己能够删除自己了。在Java和C#这样纯的面向对象的语言中...原创 2019-03-01 14:40:25 · 3014 阅读 · 0 评论 -
Keil编译后Code RO Data Rw Data ZI的含义
Code为程序代码部分RO-data 表示 程序定义的常量 const temp;RW-data 表示 已初始化的全局变量ZI-data 表示 未初始化的全局变量初始化时RW-data从flash拷贝到RAM生成的map文件位于list文件夹下 (KEIL) Total RO Size (Code + RO Data) 18568 (...原创 2019-03-11 11:16:15 · 2863 阅读 · 0 评论 -
error: jump to label ‘xxxxx’ [-fpermissive] linux下C++编译错误
linux中C++中使用goto语句可以跳到指定的函数末端,在使用g++编译时,要注意在goto语句出现之后是不允许出现新申明的变量,所以需要申明变量需要放在所有goto语句之前。而windows的VisutalStudio编译无此问题...原创 2019-09-29 16:23:00 · 411 阅读 · 0 评论 -
linux编译C++报错:error while loading shared libraries; 错误解决办法总结
原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.所以安装共享库后要注意共享库路径设置问题, 如下:1) 如果共享库文件安装到了/lib或/usr/lib目录下(默认安装路径...原创 2019-09-29 16:26:35 · 1220 阅读 · 0 评论 -
eclipse的C++工程调用静态库文件设置
需要再linker里面设置好调用的.a静态库的路径,如下:原创 2019-09-30 10:37:39 · 521 阅读 · 0 评论 -
dlsym获取变量或函数接口时RTLD_LAZY RTLD_NOW RTLD_GLOBAL区别
linux使用void *dlopen(const char *filename, int flag)调用so动态库时,其中flag有:RTLD_LAZY RTLD_NOW RTLD_GLOBAL,其含义分别为:RTLD_LAZY:在dlopen返回前,对于动态库中存在的未定义的变量(如外部变量extern,也可以是函数)不执行解析,就是不解析这个变量的地址。RTLD_NOW:与上面不...原创 2019-09-30 10:55:18 · 7939 阅读 · 0 评论 -
Eclipse编译生成C++的静态库.a文件
1、使用eclipse生成静态库如图 new --> C++ project --> Static Library -->next --> finish完成编程后,点击 build 即在Debug 下看到 生成的 .a 文件 即是想要得到的静态库2、静态库的使用使用eclipse添加自己的静态库 暂时不会 方法行不通 有待后续解决现使用手动方式:...原创 2019-09-30 13:59:36 · 2827 阅读 · 0 评论 -
排序算法之简单选择排序
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止/*************选择法排序**************/template<class T>void selectsort(T arr[],int len...原创 2019-02-28 14:48:51 · 3088 阅读 · 0 评论 -
排序算法之冒泡排序
算法思想:从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾。经过第一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置。第一轮结束后,继续第二轮。仍然从数组头部开始比较,让较大的元素逐渐往后移动,直到数组的倒数第二个元素为止。经过第二轮的比较,就可以找到次大的元素,并将它放到倒数第二个位置。以此类推,进行 n-1(n 为数组长度)...原创 2019-02-28 14:47:47 · 3133 阅读 · 0 评论 -
排序算法之快速排序
快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想:1、从数列中取出一个数作为基准数(枢轴,pivot)。2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素/******************快速排序*****************...原创 2019-02-28 14:46:18 · 3069 阅读 · 0 评论 -
Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
下面程序,递归读取某文件夹及其子文件夹下所有文件名:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dirent.h>#include <unistd.h>int readFileList(char *basePath){ DIR *dir; ...原创 2018-07-10 13:40:34 · 5302 阅读 · 0 评论 -
linux下C++移动文件和文件夹 复制文件
功能: 给一个文件重命名用 法: int rename(char *oldname, char *newname);头文件:#include <stdio.h>说明:用该函数可以实现文件移动功能,把一个文件的完整路径的盘符改一下就实现了这个文件的移动。具体参见下面的程序示例说明。#include <stdio.h>int rename(const char *oldpath...原创 2018-07-10 13:42:09 · 17023 阅读 · 3 评论 -
Linux exec函数
在Linux中要使用exec函数族。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个,但它们大致相同,在 Linux中,它们分别是:execl,execlp,execle,execv,execve和execvp,下面我只以execlp为例,其它函数究竟与execlp有何...原创 2018-07-13 16:59:55 · 5039 阅读 · 0 评论 -
linux中C++关闭线程
1. 执行完成后隐式退出2. 由线程本身显示调用pthread_exit 函数退出;pthread_exit (void * retval) 3. 被其他线程用pthread_cance函数终止:pthread_cance (pthread_t thread) 解决办法:4. // 创建线程前设置 PTHREAD_CREATE_DETACHED 属性pthread_attr_t attr;pthr...原创 2018-07-13 16:59:51 · 7133 阅读 · 0 评论 -
linux下C++根据进程名字获取进程的进程号PID
#include <stdio.h>#include <sys/types.h>#include <dirent.h>#include <stdlib.h>#include <string.h> int find_pid_by_name( char* ProcName, int* foundpid){ DIR ...原创 2018-07-12 14:24:32 · 9077 阅读 · 1 评论 -
linux下C++根据pid关闭程序进程
#include<unistd.h>#include<signal.h>#include<sys/types.h>#include<sys/wait.h>main(){pid_t pid;int status;if(!(pid= fork())){printf(“Hi I am child process!\n”);sleep(10);return;...原创 2018-07-12 14:24:15 · 7818 阅读 · 0 评论 -
linux下C++ fork与全局变量
父子进程之间的变量是位于不同的地址空间的,子进程能继承父进程中的变量,但无论如何也修改也不会反映到父进程中,要想共享内存可以通过1.ipc中shmxxx2.mmap也就是说,fork中的子线程可以读取父线程的变量,但无法修改...原创 2018-07-12 14:24:00 · 5903 阅读 · 0 评论 -
Linux下C++的进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量(semaphore),信号(signal),套接字(Socket) (1) 管道(pipe):管道允许一个进程和另一个与它有共同祖先的进程之间进行通信; (2) 命名管道(FIFO):类...原创 2018-07-12 14:23:56 · 6047 阅读 · 0 评论 -
Linux C++多线程编程时如何查看一个进程中的某个线程是否存活
使用pthread_kill函数检测一个线程是否还活着的程序,在linux环境下gcc编译通过,现将代码贴在下面:/******************************* pthread_kill.c *******************************/#include <stdio.h>#include <stdlib.h>#include <p...原创 2018-07-12 14:23:36 · 8686 阅读 · 0 评论 -
codeblocks编译时undefined reference to ""错误
可能的原因是:函数的声明和定义时,参数类型获取其他不符:原创 2018-07-12 14:23:00 · 5964 阅读 · 0 评论 -
linux某一进程占用socket句柄数量过多
使用Linux lsof命令查询,可以发现占用socket句柄数量太多,超过2048,导致工作不正常检查代码发现FTP相关代码有问题,操作结束后没有及时关闭句柄。修改代码,问题解决...原创 2018-07-12 14:22:45 · 8859 阅读 · 1 评论 -
转载:C语言善用断言(assert),提高你的Debug能力
断言可以对在系统中隐藏很深,用其它手段极难发现的问题进行定位,并且输出信息很详细,可以很好地解决大多数C语言编译器错误信息输出不详细的问题。断言是对某种条件进行检测,若条件成立则无反应,否则程序执行到断言处终止,同时输出为成立的条件。assert是一个宏定义,并不是函数。如#include <assert.h>//assert所在头文件void main(){int i = 9;...转载 2018-07-15 11:13:10 · 4077 阅读 · 0 评论 -
Eclipse 设置C++工程编译为32位目标文件
很多时候,我们使用的某个关键库是32位的,则我们的主程序也需要编译成32位还能正常使用,eclipse里面需要做相应设置。32位目标文件,则添加 -m32,这这里添加:linker中也需要添加:...原创 2019-09-30 14:04:09 · 1090 阅读 · 0 评论