linux c/c++
文章平均质量分 77
小哈龙
一颗勇往直前的心
展开
-
Unicode(UTF-8,UTF-16,UTF-32)解析规则
Unicode只是一个符号集,它只规定了符号的二进制代码,并没有规定这个二进制代码应该如何进行存储,简单的讲就是,Unicode为所有字符提供一个唯一的编号,然后UTF-8、UTF-16等只是将字符的Unicode编号编码成相应的二进制代码进行存储或运算,所以相同Unicode编号若用不同的编码方式进行编码,最后会产生不同的二进制代码,这就是有时候文件造成乱码的原因。Unicode与JavaScript详解(阮一峰)字符编码笔记:ASCII,Unicode 和 UTF-8(阮一峰)转载 2024-04-10 11:03:58 · 466 阅读 · 0 评论 -
dxflib实现dxf文件的读写
dxflib是开源的读写dxf文件的库,在QCAD上可以直接下载(QCAD - Downloads)。dxf作为一种通用的绘图文件格式,包含的信息量非常大,要去理解文件的内容也比较受苦,详细的解释在论坛里可以找到(dxf 格式详解_dxf是什么文件格式_runing9的博客-CSDN博客)。使用dxflib库的优势在于它很好地简化了各部分的读写,代码可读性很强,同时配库只需要将压缩包下的src文件包含在目录中即可。转载 2023-11-20 10:54:17 · 727 阅读 · 0 评论 -
c++文件解析之换行(CRLF、LF、CR)
CRLFCarriage-ReturnLine-Feed的缩写,回车换行的意思CRCarriageReturn,对应ASCII13中转义字符\r,表示回车LFLinefeed,对应ASCII10中转义字符\n,表示换行CRLFCarriageReturn&Linefeed,\r\n,表示回车并换行(ASCII码表里也有用newline,nl表示换行的)据传说,CR、LF最原始的还要追踪到最早到机械打字机时代,CR回到同一行的纸张最左侧的意思,两个组合可不就是换行....原创 2022-07-28 18:05:31 · 2778 阅读 · 0 评论 -
c/c++文件操作之缓冲区
一.前言在使用c/c++读取文件,写入文件是很常用的操作,在使用之余很少注意一些细节,比如文件流的缓冲区,系统内核系统空间与用户空间之间的交互操作等,此处来简单描述一下缓冲区二.缓冲区含义:内存中开辟的一片缓冲区域缓冲类型:全缓冲,行缓冲,不带缓冲操作方式:可以通过标准库函数setvbuf来设置缓冲区的类型setvbuf(_Inout_ FILE * _File, _Inout_updates_opt_z_(_Size) char * _Buf, _In_ int _Mode,原创 2021-10-27 18:26:42 · 3669 阅读 · 0 评论 -
文件路径的正斜杠(/)与反斜杠(\)
先总结:斜杠/常用;反斜杠\只有在windows系统中使用C文件路径为什么要用双斜杠?因为 \ 在 C/C++/C# 中是转义前导字符,例如 \n 代表换行。如果路径中刚好有类似转义字符开头的,那么就会引起问题,所以路径中的 \ 必须用 \ 的形式。路径中使用斜杠/和反斜杠\的区别到底是什么?事实上是只有windows系统中用\,其他的项目中,linux中都使用/,这是历史原因,不解释.Unix使用斜杆/ 作为路径分隔符,而web应用最先使用在Unix系统上面,所以目前所有的网络地址转载 2021-08-11 16:27:36 · 4742 阅读 · 0 评论 -
c++:从单例到内存屏障
本文转载自:https://redrain.blog.csdn.net/article/details/111327141首先我们用c++写一个经典的单例:#include <mutex>class Singleton {public: static Singleton* GetInstance() { if (!instance_) { std::lock_guard<std::mutex> lock(loc...转载 2021-02-24 14:48:09 · 2378 阅读 · 0 评论 -
5分钟搞定内存字节对齐
本文转载自:https://blog.csdn.net/hairetz/article/details/4084088#comments_12882172写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用.转载 2020-11-25 16:00:50 · 224 阅读 · 0 评论 -
浅谈c++纯虚函数的多态与数据隐藏
纯虚函数概述纯虚函数在c++中引入的一个概念,引入原因有两点:为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。 同时含有纯虚拟函数的类称为...原创 2020-11-10 10:26:37 · 296 阅读 · 0 评论 -
进程的创建
windows下创建进程CreateProcess函数简介windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下BOOLCreateProcess( LPCTSTRlpApplicationName,//应用程序名称 LPTSTRlpCommandLine,//命令行字符串 LPSECURITY_ATTRIBUTESlpProcessAttributes,//进程的安全属性...转载 2020-08-19 15:40:41 · 497 阅读 · 0 评论 -
孤儿进程与僵尸进程
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。当一个 进程完成.转载 2020-08-19 14:56:38 · 227 阅读 · 0 评论 -
动态链接库dll,导入库lib,静态链接库lib
一.windows下动态链接库dll,导入库lib,静态链接库lib1.导入库lib与静态链接库lib目前以lib后缀的库有两种,一种为静态链接库(StaticLibary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(ImportLibary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib...转载 2020-08-15 17:06:27 · 933 阅读 · 0 评论 -
c++ while(condition) 中condition的一些思考
前言再来看一个c++的基础性问题,while循环,一个再熟悉不过的c++语法,一直只知道使用,对于他的一些使用细节缺少认知,下面先看一下基本语法(摘自菜鸟教程)语法C++ 中while循环的语法:while(condition){ statement(s);}在这里,statement(s)可以是一个单独的语句,也可以是几个语句组成的代码块。condition可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。当条件为假时,程序流将继续执行紧接着循环...原创 2020-08-03 14:03:35 · 1471 阅读 · 0 评论 -
C++引用(作为函数参数和返回值)
一、引用简介引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;eg:int a; int &b=a; //定义引用b,它是变量a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对其进行初始化。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名转载 2020-06-28 20:18:53 · 5501 阅读 · 0 评论 -
基本类型,指针,双指针作为函数参数
1.指针与双指针的内存示意图函数内定义如下变量Int* a=1;Int** b=2;a[0x********] --->栈内存地址n(值为1);b[0x********] --->*b[0x********] ---->栈内存地址m(值为2);2.当基本类型,指针,双指针作为函数参数传入函数#include<iostream>using namespace std;//修改从函数外部传来的变量的数值void fun(int* vartype){原创 2020-06-27 22:31:56 · 409 阅读 · 0 评论 -
线程池理解
线程池理解:线程池就像是一个大饭店,饭店里有N多个服务员,每个服务员就相当于线程池中的每个线程,而这个店里面会来很多顾客吃饭,每个顾客都会从门口有序排队进入饭店就餐(每个顾客就相当于线程池中的请求队列),每一名顾客同一时间只需要一名顾客服务,一名服务员对应一名顾客,包括从门口进入饭店以及后续上菜等操作都需要一名服务员从头到尾服务(高级餐厅...)(这其实就是线程安全,顾客就是资源,同一时间只能有一个线程访问),饭店能容纳的顾客数量是有限的,座位有限,其他顾客只能在外边排队,等待里面的顾客吃完原创 2020-06-14 21:07:02 · 228 阅读 · 0 评论 -
Linux系统之下的基本gdb调试
一、调试的工具: gdb二、调试的对象: 可执行程序,而不是.c文件,调试的对象一定是一个进程。调试时,程序必须带有调试信息,所以在编译链接的过程中,需要加上参数“-g”。三、调试的命令:l 显示代码回车 继续执行上一操作b + 行号 加断点info + b(break) 查看断点信息r 运行程序n 下一步,单步执行p + 变量名 打印变量的值(p + &变量名 打印变量的地址)q 退出调试display + 变量名 持续打印c 继续执行delete + 断点编号 删...转载 2020-06-14 21:00:23 · 216 阅读 · 0 评论 -
简单web服务器的实现(C++)
本文转载自:https://blog.csdn.net/qq_36573828/article/details/82784425一、具体功能实现GET方法请求解析POST方法请求解析返回请求资源页面利用GET方法实现加减法利用POST方法实现加减法HTTP请求行具体解析400、403、404错误码返回的处理注意:!!本人也是小白一只,这是刚刚开始学习网络编程写的东西,存在很多问题。也未用到RAII等机制,纯属是披着C++皮的C语言项目,类的封装也不是太好。也未经过压力、性能等测试。转载 2020-05-31 23:02:27 · 2959 阅读 · 0 评论 -
#ifndef HeaderName_h #define HeaderName_h #endif 使用详解
想必很多人都看到过头文件中写有:#ifndef HeaderName_h #defineHeaderName_h // 这里面通常写各种宏定义、其他头文件的包含 #endif这样做的目的:防止该头文件被重...转载 2020-05-31 22:43:04 · 1123 阅读 · 0 评论 -
getopt()用法详解
getopt被用来解析命令行选项参数。就不用自己写东东处理argv了。#include <unistd.h> extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //当opterr=0时,getopt不向stderr输出错误信息。 extern int optop转载 2020-05-31 22:40:50 · 31036 阅读 · 0 评论 -
/usr/bin/ld: cannot find -lmysqlclient解决方法
1、使用mysql进行编译时,出现下面的错误2、使用 locate -bLi -regex -r mysqlcli命令,查看libmysqlclient的位置3、这是之前的makefile中的编译选项4、修改如下,添加-L/usr/lib64/mysql参考资料:https://forum.directadmin.com/showthread.php?t=12219原文链接:https://blog.csdn.net/libinbin_1014/artic..转载 2020-05-18 20:46:08 · 986 阅读 · 0 评论 -
C++解析char *p与char p[]
本文转载自:https://blog.csdn.net/c243311364/article/details/81502722首先来看一道题目:#include "stdio.h"char *get_string_1(){ char p[] = "hello world!"; return p;}char *get_string_2(){ char *p...转载 2020-04-08 11:34:33 · 1560 阅读 · 0 评论 -
C++中cout和cerr的区别?
原文链接:https://blog.csdn.net/garfield2005/article/details/7639833之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以下的内容均是本人从网上查阅资料看来整理的,暂时还没有查阅官方资料,不保证准确,欢迎讨论)其实大家平常常会用的主要有三个:cout、cerr、clog,首先简单介绍下三者。这三者在C++中都...转载 2020-04-08 10:14:43 · 4098 阅读 · 0 评论 -
采用new分配内存失败时为什么会出现两种错误报告方式?
本文转载自:http://www.51testing.com/html/70/n-827070-2.html在C++语言中,我们经常会使用new给一个对象分配内存空间,而当内存不够会出现内存不足的情况。C++提供了两中报告方式: 1、抛出bad_alloc异常来报告分配失败; 2、返回空指针,而不会抛出异常。 C++为什么会采用这两种方式呢?这主要是由于各大编译器公司设计C+...转载 2020-04-08 09:55:59 · 1478 阅读 · 0 评论 -
C/C++ 中长度为0的数组
近日在看项目中的框架代码时,发现了了一个奇特的语法:长度为0的数组例如uint8_t buf[0];我从未见过这样的写法,所以在网上查了查资料,了解并记录下来.在标准的C/C++中,长度为0的数组是不被允许的,它算是一个C/C++扩展,如果你的编译器支持这个扩展,你就可以使用它.VS系列编译器不完全支持这个扩展,如果你这样定义,多半会在编译时出现这样的警告:warning ...转载 2020-04-01 11:54:22 · 1965 阅读 · 0 评论 -
Makefile经典教程
本文转载自:https://www.cnblogs.com/wittxie/p/9836097.html阅读目录简介 规则 语法 我写的管理大型项目的makefile 内容推荐 引用本地址简介Makefile 是和 make 命令一起配合使用的,很多大型项目的编译都是通过 Makefile 来组织的,。我建立工程的方法有以下三点:1.makefile:优点:使...转载 2020-03-23 17:34:51 · 188 阅读 · 0 评论 -
C++常用数据类型和Windows常见数据类型
一、C++基本的内置类型C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:类型 关键字 布尔型 bool 字符型 char 整型 int 浮点型 float 双浮点型 double 无类型 void 宽字符型 wchar_t 一些基本类型可以使用一个...转载 2020-03-13 11:10:08 · 679 阅读 · 0 评论 -
C++11中的原子操作(atomic operation)
所谓的原子操作,取的就是“原子是最小的、不可分割的最小个体”的意义,它表示在多个线程访问同一个全局资源的时候,能够确保所有其他的线程都不在同一时间内访问相同的资源。也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问。这有点类似互斥对象对共享资源的访问的保护,但是原子操作更加接近底层,因而效率更高。在以往的C++标准中并没有对原子操作进行规定,我们往往是使用汇编语言,或者是借助第三方的线程...转载 2019-12-25 18:24:37 · 348 阅读 · 0 评论 -
进程与线程的一个简单解释
作者:阮一峰日期:2013年4月24日进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候...转载 2019-11-27 14:52:01 · 110 阅读 · 0 评论 -
C++11 关键字noexcept
1 关键字noexcept从C++11开始,我们能看到很多代码当中都有关键字noexcept。比如下面就是std::initializer_list的默认构造函数,其中使用了noexcept。 constexpr initializer_list() noexcept : _M_array(0), _M_len(0) { }该关键字告诉编译器,函数中不会发生异常...转载 2019-11-12 10:43:13 · 1196 阅读 · 0 评论 -
类对象和类指针以及类的内存分布
类对象和类指针是两个概念比如有个类:class Test;定义类对象:Test test;1.test是类Test的一个实例,2. test是类Test的一个实例,可以供通过"."运算符访问类中的public成员定义类指针:Test *p_test; // 此时p_test只是一个指向Test类类型的指针,还没有分配内存。要使用指针,需要p_test = new Test(); ...转载 2019-11-07 18:11:37 · 791 阅读 · 1 评论 -
[c++11]我理解的右值引用、移动语义和完美转发
c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。左值、右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:看能不能对表达式取地址,如...转载 2019-11-04 17:51:37 · 358 阅读 · 1 评论 -
字符串比较原理(strcmp,string)
字符串比较分为两种情况,一种是单个字符比较大小,一种是多个字符构成的字符串整体比较大小。字符与字符串比较原理:字符串与字符比较原理其实都是比较单个字符的ASCII码值。如果单纯比较长度,直接调用类似于strlen()之类的函数就可以,加以比较即可. 如果比较字符串的大小,则比较的是字符的ASCII编码的大小.你搜索一下ASCII码表就可以得知每一个ASCII字符的大小.在比较字符串...原创 2019-10-29 11:15:10 · 45295 阅读 · 1 评论 -
C++11常用新特性
最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11推广开来,整理以下文档,方便自己查阅,也方便同事快速上手。(对于异步编程十分实用的Future/Promise以及智能指针等,将不做整理介绍,组内使用的框架已经支持并广泛使用了,用的是自己公司参考boost实现的版本)1. nullptrnullptr 出...转载 2019-10-28 12:22:04 · 296 阅读 · 1 评论 -
c++ 11 中for循环新增的用法(基于范围的for循环)
for循环在c++中很常见,在c++11中新增了for的用法,我也是在最近看代码的时候遇见的,在for循环新增的功能中也涉及到了c++11新增的auto,可以自动获取变量类型。以前的用法:for(表达式1;表达式2;表达式3){ //循环的内容}c++11中的用法:for 语句允许简单的范围迭代:int my_array[5] = {1, 2, 3, 4, 5}...原创 2019-10-25 14:49:29 · 1244 阅读 · 0 评论 -
C++ operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。一、为什么使用操作符重载?对于系统的所有操作符,一般情况下,只支持基本数据类...转载 2019-10-21 11:19:42 · 334 阅读 · 0 评论 -
实例说明listen()函数第二个参数的意义与用法
关于listen函数问题,在网上查阅了部分资料,如下资料对自己理解很有帮助我们先来看结果:Client:#include <sys/socket.h>#include <stdio.h>#include <string.h>#include <netinet/in.h>#include <stdlib.h>#...转载 2019-10-16 15:34:08 · 832 阅读 · 0 评论 -
CentOS 6.6上搭建C++运行环境
1、安装运行环境 # yum install gcc-c++备注:此时会将gcc-c++和libstdc++-devel都安装上。 2、查看g++是否安装成功 [root@MyRHEL 桌面]# g++ -v使用内建 specs。转载 2017-09-12 16:14:43 · 1926 阅读 · 0 评论 -
C源文件到ELF可执行文件的生成过程
you can download from site: http://michgarfield.wix.com/home预备知识,阅读文章“as中常见伪指令.word .align .balign[lw] .macro .globl”C源文件到ELF可执行文件的生成过程1. 编译器的预处理2. C源代码转换为汇编代码3. 生成目标文件4.转载 2017-09-12 19:12:14 · 1960 阅读 · 0 评论 -
线程池原理及创建(C++实现)
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器转载 2017-10-27 10:44:38 · 358 阅读 · 0 评论 -
指针函数与函数指针的区别
一、指针函数与函数指针1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针类型标识符 *函数名(参数表)int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。表示:float ...转载 2017-11-08 17:04:21 · 303 阅读 · 0 评论