C
文章平均质量分 57
C
LtMamba
这个作者很懒,什么都没留下…
展开
-
Autotools -- Basic
构建大型 c/cpp 项目,自动生成大型 makefile 文件。原创 2024-02-03 21:12:36 · 233 阅读 · 0 评论 -
fastdfs --详解
tracker 上的元信息都是由 storage 汇报的信息生成的,本身不需要持久化任何数据,这样使得 tracker 非常容易扩展,直接增加 tracker 机器即可扩展为 tracker cluster 来服务,cluster 里每个 tracker 之间是完全对等的,所有的 tracker 都接受 stroage 的心跳信息,生成元数据信息来提供读写服务,tracker 根据 storage 的心跳信息,建立 group==>[storage server list] 的映射表。原创 2024-02-02 16:55:37 · 959 阅读 · 0 评论 -
POSIX(包含程序的可移植性) -- 详解
POSIX 标准包含了进程管理、文件管理、网络通信、线程和同步、信号处理等方面的功能。这些接口定义了函数、数据类型和常量等,为开发者提供了一个可移植的方法来与操作系统进行交互。原创 2024-02-02 15:02:41 · 1144 阅读 · 0 评论 -
C -- 内联函数和内联汇编
在 C 语言中,我们可以指定编译器将一个函数代码到调用其代码的地方执行。这种函数调用方式和默认压栈调用方式不同,我们称这种函数为内联函数。有点像宏。优点:内联函数。实现:指定编译器将一个函数处理为内联函数,我们只要在函数声明前加上 inline 关键字就可以了。原创 2024-01-12 11:29:53 · 385 阅读 · 0 评论 -
uthash -- basic
参考链接uthash源码链接uthash使用参考链接源码参考链接源码注释版参考链接原创 2024-01-07 21:14:55 · 388 阅读 · 0 评论 -
c/c++--__attribute__ 机制
_attribute__机制实际上是 GCC 的一种编译器命令,用来指示编译器执行实现某些高级操作。__attribute__可以设置。LLVM也借用了GCC的__attribute__,并进行了扩展。原创 2023-10-12 20:45:00 · 499 阅读 · 0 评论 -
c/c++--编译指令(预处理之后) #pragma
指示编译器。原创 2023-10-12 20:30:00 · 312 阅读 · 0 评论 -
c/c++--字节对齐(byte alignment)
的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系跟编译器有关.//用法如下struct bbbchar a;int b;//直接按照实际占用字节来对齐,其实就是相当于按照1个字节对齐了//这里计算sizeof(st3)=5。原创 2023-10-12 21:00:00 · 2889 阅读 · 1 评论 -
C/C++--跨平台--预定义宏 WIN32、_WIN32、_WIN64
只要包含了 Windows.h,那么 WIN32 常量是肯定定义了的,所以不能用于判断平台环境。只有64位程序才有,故此宏用来判断环境是 ×86 还是 ×64.32位和64位程序都有,且总是定义的.原创 2023-10-11 07:50:33 · 1754 阅读 · 0 评论 -
C--位域
参考链接原创 2023-07-14 00:00:00 · 104 阅读 · 0 评论 -
makefile -- Basic
make 工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式——。原创 2023-07-06 19:00:00 · 326 阅读 · 0 评论 -
linux--GCC--安装GCC编译器
打开官方网站GCC, the GNU Compiler Collection点击mirror(镜像界面)随便找个镜像地址点进去找个最新的点进去并下载具体安装步骤https://www.cnblogs.com/tankblog/p/5919901.html原创 2021-09-02 15:51:14 · 1369 阅读 · 0 评论 -
c/c++--位操作
程序中任何变量、函数等在计算机中都是以二进制的形式存储。对他们的操作其实都是对二进制位的操作。位运算就提供了对这些二进制位进行操作的方式。。二进制数有三种编码形式:原码、反码和补码。原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。反码:整数的数值位按位取反(0→1,1→0),符号位不变。(负整数)补码:反码+1(负整数)。注意: 正整数(原码=反码=补码) 负整数(反码和补码都需要计算),而,而不是原码!原创 2023-06-04 14:24:45 · 573 阅读 · 0 评论 -
Linux--ServerProgramming--(2)socket
现在大多PC采用小端字节序,因此小端字节序又称为主机字节序。而大端字节序又称为网络字节序。原创 2023-06-03 08:45:39 · 321 阅读 · 0 评论 -
Linux--ServerProgramming--(3)详解高性能服务器程序框架
随着网络设计模式兴起,Reactor 和 Proactor 事件处理模式应运而生。半同步/半反应堆(half-sync/half-reactive)半同步/半异步(half-sync/half-async)不过可以使用 同步I/O 模拟出 Proactor 模式。服务器种类繁多,但基本框架一样,不同之处在于逻辑处理。上面提到I/O处理单元 包含。是最常用的 I/O 通知机制。原创 2023-06-01 17:02:21 · 840 阅读 · 0 评论 -
数据结构——基础及C实现demo
一、算法和数据结构基础 数据结构只是静态的描述了数据元素之间的关系, 高效的程序需要在数据结构的基础上设计和选择算法。 算法是为了解决实际问题而设计的。 数据结构是算法需要处理的问题载体。算法效率的度量: 1.事后统计法 2.事前分析估算算法的时间复杂度,指最坏时间复杂度;大O表示法表示算法的时间复杂度,只有常数项记作 1 .操作数量的估算可以作为时间复杂度的估算。线性表线性表 是零个或多个数据元素的有限序列。特性: 数据元素之间是有序的。 数据元素个数是有限的。原创 2022-04-27 15:42:37 · 247 阅读 · 0 评论 -
C——循环体中第二个scanf函数自动读入‘\n‘问题
一、问题描述使用**#号法递归生成二叉树**时遇到一个scanf自动读取缓存中\n的问题,导致程序无法按照设想的状态执行。产生的主要原因是 fflush(stdin);未生效.代码如下://#号法前序创建二叉树//test tree:// AB#C##E#F##// AB#CD##E#F##// A// B E//# C # F// // D # # // # # #inclu原创 2022-04-20 17:57:37 · 1202 阅读 · 0 评论 -
ComputerKnowledge——迭代和递归异同
一、迭代和递归异同 递归(recursion) 迭代(iteration) 概念 常被用来描述以自相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(A调用A) 重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B) 结构 递归是一个树结构,从字面可以其理解为重复“递推”和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历。 迭代是一个环结构,从初始状态开始,每次迭代原创 2022-04-12 08:30:45 · 261 阅读 · 0 评论 -
CMake--Basic
一、CMake介绍 CMake 全名为 cross platform make。 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。 能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性。 cmake是跨平台项目管理工具,它用更抽象的语法来组织项目。 虽然,仍然是目标,依赖之类的东西,但更为抽象和友好,比如你可用math表示数学库,而不需要再具体指定到底是math.dll还是libmath.so, 【在wind原创 2022-03-18 09:55:43 · 1578 阅读 · 0 评论 -
Command——CMake
常用命令解释下面用的是 C 语言的注释,实际编写 CMakeLists.txt 时不要把注释也写上了。1.PROJECT 关键字 用来指定工程的名字和支持的语言,默认支持所有语言。 PROJECT(HELLO) //指定了工程的名字,并且按默认支持所有语言 PROJECT(HELLO CXX) //指定了工程的名字,并且支持语言是C++ PROJECT(HELLO C CXX) //指定了工程的名字,并且支持语言是 C和C++2.SET 关键字 用来显示的指定变量的原创 2022-03-18 09:55:07 · 1080 阅读 · 1 评论 -
Linux网络编程——socket编程
一、socketsocket 网络套接字一个文件文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现(接收缓冲区和发送缓冲区))通讯过程中,套接字一定是 成对 出现的。二、网络字节序...原创 2022-03-16 14:30:00 · 3494 阅读 · 2 评论 -
Linux网络编程——开源库 libevent
一、基础介绍libevent库: 开源。精简。跨平台(Windows、Linux、macos、unix)。专注于网络通信。官网链接二、源码安装(参考 README文件)1.安装put C:\Soft\libevent-2.1.12-stable.tar.gz /root/usr/local/src # 上传tar -zxvf libevent-2.1.12-stable.tar.gz # 解压cd libevent-2.1.12-stable #进入压缩目录./config原创 2022-03-16 14:29:37 · 749 阅读 · 0 评论 -
Linux环境编程——编辑器
一、基础毫无疑问,Linux环境编程必须先拥有一台安装Linux系统的电脑(服务器、虚拟机)。二、Vi 或 VimVi 或 Vim Vi是 Linux系统 自带的文本编辑器,类似windows的记事本。 Vim 是 Vi的升级版。 Linux系统可通过一系列配置实现代码的编写。通过gcc命令将所写代码编译为可执行文件。此环境下一般使用 gdb 工具调试。gdb使用连接Vim使用连接三、Visual Studio CodeVisual Studio Code 是微软旗下可以安装到原创 2022-03-13 10:25:05 · 1583 阅读 · 0 评论 -
Linux网络编程——网络基础
一、OSI分层模型 应用层:http、ftp、nfs、ssh、telnet 传输层:TCP、UDP 网络层:IP、ICMP、IGMP 链路层:以太网帧协议、ARPARP协议:根据 指定IP 地址获取mac地址. (mac地址是计算机的唯一标识) 两步:1.请求 源主机发送不完整的ARP数据报请求(有源IP、mac地址及指定对端IP,无指定IP对应主机的mac地址)。 2.应答 通过源主机发送请求后,对端主机会发送相应的应答将完整的ARP数据报原创 2022-03-10 11:13:11 · 300 阅读 · 0 评论 -
Linux网络编程——线程池
一、传统线程工作方式传统线程工作方式: 接收消息 ==> 消息分类 ==> 线程创建 ==> 传递消息到子线程 ==> 线程分离 ==> 在子线程中执行任务 ==> 子线程任务结束 ==> 销毁子线程; 当面临大量消息频繁请求服务器的情况时,会频繁的创建与销毁线程,而这是一种奢侈的开销,特别对于嵌入式服务器来说更应保证内存资源的合理利用; 为了适当解决这一过程,催生出了线程池(threadpool)。 线程池允许一...原创 2022-04-09 19:47:01 · 393 阅读 · 0 评论 -
单工、半双工、双工
对比表格 单工 半双工 全双工 概念 传输是单向的 可以在两个方向上传输,但是不能同时传输 可以同时在信号载体的两个方向传输原创 2022-03-09 21:44:59 · 205 阅读 · 0 评论 -
Linux网络编程——B/S模型
一、http协议基础http协议换行的结尾都是 \r\n 结尾,而不是 \n。二、正则表达式正则表达式没有语言限制。常用的语言都可以使用正则表达式。两个学习连接:正则表达式速查表正则表达式30分钟入门教程...原创 2022-03-09 17:12:31 · 257 阅读 · 0 评论 -
Linux网络编程——常用函数解惑
一、recv函数//用来接收网络通信对端发送的数据man recv #include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd, void *buf, size_t len, int flags);1.参数说明: sockfd :指定接收端套接字描述符 buf :指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据...原创 2022-03-09 17:09:20 · 140 阅读 · 0 评论 -
Linux系统编程——线程
一、线程概念基础线程又称LWP:light weight process 轻量级的进程,(在linux环境下)本质仍是进程。进程:独立地址空间,拥有PCB线程:有独立的PCB,但没有独立的地址空间(共享)区别: 在于是否共享地址空间。 独居(进程);合租(线程)Linux下: 线程:最小的执行单位 进程:最小分配资源单位,可看成是只有一个线程的进程 GDB和信号诞生时间比线程早,故配合使用会很麻烦。线程越多的程序理论上越可能争夺到cpu资源,但不是一味的扩展线程数,会有原创 2022-02-07 20:35:11 · 1302 阅读 · 0 评论 -
Linux系统编程——信号
一、原创 2022-01-27 08:20:02 · 1439 阅读 · 0 评论 -
Linux系统编程——进程
一、进程概念基础程序:死的。只占用磁盘空间。 --剧本进程:活的。运行起来的程序。占用内存,cpu等系统资源。 --戏并发并发的出现基于CPU的发展。然后有了多道程序设计(多进程并发执行)。CPU执行过程多少位系统实际指的就是寄存器的大小,32位就是寄存器4bytes,64位就是寄存器8bytes.虚拟内存和物理内存映射3-4G空间是内核区域,无论多少个进程都对应物理内存的一块区域。而user区域是普通用户区域,每个进程都对应相应的物理内存区域。MMU功能:原创 2022-01-22 16:56:13 · 916 阅读 · 0 评论 -
Linux系统编程——系统函数(调用)
Linux系统函数简介。man 2 部分原创 2022-01-16 08:53:53 · 3714 阅读 · 0 评论 -
gcc/g++ --Basic(含制作动静态库)
一、四个步骤gcc执行的四个步骤:二、Build Command1.基础 -o 指定生成文件的名字 -E 预处理 #头文件是在这个地方用到的 -S 编译 -c 汇编 得到的是二进制文件 链接 无参数 gcc -E hello.c -o hello.i #不指定-o就不生成.i文件 #头文件是在这个地方用到的 gcc -S hello.i (-o hello.s) #可不指定-o参数,会自动生成相应.s文件 gcc -c hello.s (-o hello.o原创 2022-01-10 14:54:44 · 1543 阅读 · 0 评论 -
网络编程面试及开源项目
面试题一二开源项目:一二原创 2021-12-18 17:13:13 · 104 阅读 · 0 评论 -
左移操作符<< 和右移操作符>>
参考链接**移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。****逻辑移位**:移出去的位丢弃,空缺位(vacant bit)用 0 填充。**算术移位**:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。左移操作符<<左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。–例如:将a原创 2021-11-25 16:57:14 · 1263 阅读 · 0 评论 -
Linux系统编程-vi/vim Command
vivi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样.vimvim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。vi的三种模式命令行模式:在命令行模式下,任何键盘输入都是命令.插入模式:替换模式:原创 2021-10-11 09:12:59 · 427 阅读 · 0 评论 -
Command--makefile
参考链接原创 2021-09-28 11:22:02 · 404 阅读 · 0 评论 -
C语言typedef的用法
参考链接一、概念C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称。示例:typedef int BOOL;//定义一个布尔类型#define TRUE 1#define FALSE 0//定义好之后,就可以像使用基本类型数据一样使用它了,如下面的代码所示:BOOL bflag=TRUE;二、typedef的4种用法为基本数据类型定义新的类型名比如跨平台时,有的机子不支持long double,但有需要高精度的一个类型参与计算,那就可以进行如下定义:typ原创 2021-11-04 08:41:14 · 15229 阅读 · 1 评论 -
C语言——知识点汇总
1.基本数据类型C语言的基本数据类型包括字符型、整数型、浮点型。2.常量常量或常数,表示固定不变的数据,是具体的数据。1)字符常量,如'6','a','F',不能是中文,例如'女',因为一个汉字和全角的符号占两个字节(GBK编码)。2)整型常量,如6,27,-299。3)浮点型常量,如5.43,-2.3,5.67,6.0。4)字符串常量,如"625","女","www.freecplus.net","西施"。3.变量- 字符串变量在C语言中,没有“字符串”这个数据类型,而是用字原创 2021-11-02 09:22:19 · 6088 阅读 · 0 评论 -
Linux&C++ 语法知识
C++ 是在C语言的基础上增加新特性,从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译。1. C++程序的命名规则C++头文件一般采用.h后缀,也用有.hpp的。C++程序文件一般采用.cpp后缀,也有用.cc的,建议采用.cpp,C++对程序文件的命名没有强制要求,采用.cpp为后缀是大部分程序员的习惯。2. C++程序的编译在某些操作系统中,C和C++是同一个编译器,在CentOS中,C的编译器是gcc,C++的编译器是g++。3. C++是面向对象原创 2021-10-26 13:50:55 · 659 阅读 · 1 评论
分享