linux网络编程目录
关于Linux服务器编程,我们有一些约定成俗的规范
- Linux服务器程序一般以后台进程(也叫做守护进程(daemon))的形式运行。它没有控制终端,因而也不会意外接收到用户输入。守护进程的父进程是init进程(PID为1的进程)
- Linux服务器程序通常有一套日志系统,它至少能够输出日志到文件,有的还能输出日志到专门的UDP服务器。大部分后台进程都在/var/log目录下拥有自己的日志目录
- Linux服务器程序一般以某个专门的非root身份运行。比如mysqld、httpd、syslogd等后台进程,分别拥有自己的运行账号mysql、apache、syslog
- Linux服务器程序通常可以通过配置文件配置。绝大多数服务器程序都有自己的配置文件,一般存放在/ect目录下。
- Linux服务器进程通常会在启动的时候生成一个PID文件并存入/var/run目录中,以记录该后台进程的PID。比如syslogd的PID文件是/var/run/syslogd.pid
- Linux服务器程序通常要考虑系统资源和限制,以预测自身能够承受多大负载
我的
- C/C++编程:处理ctrl+c的中断
- C/C++编程:对于C的error, stderr封装
https://blog.csdn.net/zhizhengguan/category_7831160_23.html
- cmake 从入门到入土
- C/C++编程:打印变量或对象的地址
- C/C++编程:标准库 - stdio.h 学习
- C标准库:<ctype.h>
- C/C++编程:C标准库<string.h>
- C/C++编程:命令行参数
- C/C++编程:什么是ANSI C标准?
- C/C++编程:什么是预处理命令?
- C/C++编程:#pragma once用法总结
- C/C++编程:__FILE__,__FUNCTION__和__LINE__
- C/C++编程:宏offsetof()
- C/C++编程:c++中的struct
- C/C++编程:结构体默认对齐方式
- C/C++编程:#pragma pack的使用
- C/C++编程:__attribute__((constructor))、 __attribute__((destructor)) 先于main()函数调用
- C/C++编程: __attribute__((aligned(n)))、__attribute__((packed))、__alignof
- C/C++编程:联合体
- C/C++编程: Anonymous unions(匿名联合)
- C/C++编程:使用枚举类型作为函数参数
- C/C++编程:C风格数组
- C/C++编程:C语言中的内联函数
- C/C++编程:0长度数组与变长数组
- C/C++编程:用C语言简单实现一个可变数组
- C/C++编程:C实现hashtable
- C/C++编程:用于进程间通信的map
- C/C++编程:STL array
- C/C++编程:STL vector内存释放(clear(), swap(), shrink_to_fit())
- C/C++编程:STL中map内存彻底释放方法
- C/C++编程:STL deque
- C/C++编程:STL forward_list
- C/C++编程:STL list
- C/C++编程:STL set/multiset
- C/C++编程:STL map
- C/C++编程:STL unordered_map
- C/C++编程:STL pair
- C/C++编程:STL priority_queue
- C/C++编程:chrono库时间
- C/C++编程:STL Algorithm
- C/C++编程:STL算法总结
- C/C++编程:运算符重载
- C/C++编程:自增、自减操作符前缀形式和后缀形式的区别
- C/C++编程:可变参数
- C/C++编程:函数对象
- C/C++编程:std::function
- C/C++编程:std::is_bind_expression
- C/C++编程:std::bind_front
- C/C++编程:std::swap
- C/C++编程:Type Trait
- C/C++编程:std::ref与std::cref
- C/C++编程:std radio库进行分数的运算与比较
- C/C++编程:tan、atan、sin、cos等三角函数用法的代码演示及结果,注意角度和弧度的转换!
- C/C++编程:标准库bitset
- C/C++编程:本地化库locate
- C/C++编程:输入输出库
- C/C++编程:输入输出操作符
- C/C++编程:流的基类std :: ios_base
- C/C++编程:流的基类std::basic_ios
- C/C++编程:流缓冲类std::basic_streambuf
- C/C++编程:输入流类模板std :: basic_istream
- C/C++编程:输出流类模板std :: basic_ostream
- C/C++编程:输入输出流类模板std::basic_iostream
- C/C++编程:文件流缓冲区类模板std::basic_filebuf
- C/C++编程:字符流输入流std :: istream
- C/C++编程:字符串输入输出流stringstream
- C/C++编程:输入字符串流basic_istringstream、istringstream
- C/C++编程:std::cin、std::cout
- C/C++编程:文件流缓冲区filebuf
- C/C++编程:std::ifstream
- C/C++编程:利用yaml-cpp读写yaml配置文件
- C/C++编程:判断文件是否存在
- C/C++编程:文件输入输出流—压缩文件的复制
- C/C++编程:Linux下创建多级目录
- C/C++编程:读取配置文件.ini文件
- C/C++编程:C生成BMP、PNG和JPEG图片:
- C/C++编程:读取文本&图片转为二进制流
- C/C++编程:获取png和jpg图片的宽和高
- C/C++编程:大华摄像头获取yuv数据
- C/C++编程:字符编码和字符集
- C/C++编程:数值类型与string相互转换
- C/C++编程:字符串切割,删除,格式化等总结
- C/C++编程:c语言生成一个指定长度的随机字符串
- C/C++编程:web服务器入门
- C/C++编程:使用cesanta/mongoose编写restful服务
- C/C++编程:日志三方库推荐easyloggingpp
- C/C++编程:成员类(嵌套类)
- C/C++编程:具体类
- C/C++编程:抽象类基础实现
- C/C++编程:虚函数与纯虚函数
- C/C++编程:类继承中的构造函数和析构函数
- C/C++编程:protected的访问权限
- C/C++编程:自引用:返回Date&与delete this
- C/C++编程:用std::async代替线程的创建
- C/C++编程:std::thread 详解
- C/C++编程:thread_local 用法
- C/C++编程:thread库之锁的使用
- C/C++编程:获取线程的返回值
- C/C++编程:使用C++11实现一个简单的线程池
- C/C++编程:计算cpp程序运行时间(ms)(单线程&&多线程)
- C/C++编程:C++11实现简易定时器
- C/C++编程:dynamic_pointer_cast用于shared_ptr之间类型的转换,基类需要有虚函数
- C/C++编程:static_cast转换
- C/C++编程:const_cast转换
- C/C++编程:智能指针
- C/C++编程:mysql/mysql.h:没有那个文件或目录
- C/C++编程:windows下编译cpp项目时遇到/bin/sh: cc: command not found
- C/C++编程:fatal error: stdatomic.h: 没有那个文件或目录
- C/C++编程: error: no acceptable m4 could be found in $PATH
- C/C++编程: terminate called after throwing an instance of ‘std::regex_error‘
- C/C++编程:Warning: File `…/include/global.h‘ has modification time 13358 s in the future
- C/C++编程:模板与多重继承的互补
- C/C++编程:为什么需要内存池
- C/C++编程:在堆上分配内存-------malloc()、free()、 calloc()、realloc()、memalign()、posix_memalign()
- acl源码阅读之使用c语言实现一个内存池
- Onvif协议:什么是Onvif
RPC
- RPC:RPC的通信流程
- RPC:怎么设计可扩展且向后兼容的协议
- RPC:对象怎么在网络中传输
- RPC:RPC框架网络通信上的IO多路复用&&零拷贝
- RPC:架构设计
- RPC:注册中心,监控服务方的上下线,帮助分布式系统定位寻址
- RPC:注册中心,监测服务方是否存活,及时摘除不健康节点
- RPC:优雅关闭,避免服务停机带来的业务损失
- RPC:路由策略,让请求按照设定的规则发送到不同的节点上
- RPC:自适应负载均衡,选择最优服务节点
- RPC:异常重试,在约定时间内安全可靠的重试
- RPC:启动预热&&延迟暴露,避免流量打到没有启动完成的节点
- RPC:时钟轮解决定时任务以及超时检测
- RPC:业务分组,隔离流量
系统设计
- 高并发系统设计:通用方法(水平扩展,缓存,异步)
- 高并发系统设计:为什么一定要进行架构分层
- 高并发系统设计:系统的“三高”目标
- 高并发系统设计:如何用池化技术(连接池、线程池)提高系统性能
- 高并发系统设计:缓存,保护你的系统
- 高并发系统设计:读写分离,提高MySQL的并发量(查询请求增加时)
- 高并发系统设计:分库分表,MySQL存储海量数据的最后一招
- 高并发系统设计:消息队列,解决高并发写问题
- 高并发系统设计:如何保证消息仅仅被消费一次
- 高并发系统设计:如何解决消息队列中的消息堆积问题
- 高并发系统设计:为什么要做服务化拆分
- 高并发系统设计:RPC,解决分布式(微服务)通信
- 高并发系统设计:注册中心,提供服务发现、健康检测、优雅关闭的功能
- 高并发系统设计:分布式trace,排除跨服务调用慢请求
- 高并发系统设计:API网关,解决服务熔断、降级和流控
- 高并发系统设计:多机房部署
面试专题
- C/C++编程:一些面试题
- C/C++面试:面向对象的三大特性是哪些
- C/C++面试:什么是智能指针?智能指针有什么作用?分为哪几种?各自有什么样的特点?
- C/C++面试:手写智能指针类
- C/C++面试:请描述C/C++程序的内存分区
- C/C++面试:你知道啥是自旋锁吗?
- C/C++面试:引用和指针的使用场合
- C/C++面试:函数参数传递方式 — 值传参、地址传参、引用传参
- C/C++编程:#define和const有什么区别
- C/C++面试:C++ 的四种强制转换
- C/C++面试:介绍C++中所有的构造函数
- C/C++面试:printf实现原理
- C/C++面试:new/delete、malloc/free区别
- C/C++面试:const使用总结
- C/C++面试:请介绍一下STL
- C/C++面试:说下你用过的C++11新特性
- C/C++面试:左值和右值有了解过吗
- C/C++面试:说下std::move
- C/C++面试:lambda表达式
- 对于epoll、select、poll是怎么理解的
- 面试:说下你对Reactor和Proactor的理解
- 网络:TCP和UDP的区别
- 网络:你如何解决粘包问题
- 面试:以太网中的MTU是个什么东西
- 面试:解释下TIME_WAIT和CLSOE_WAIT,分别怎么解决
性能调优
- 计算机组成原理:冯-诺依曼体系结构,计算机组成的金字塔
- 计算机组成原理:CPU—计算机的大脑
- 计算机组成原理:CPU、核心,进程、线程,串行、并发、并行
- 计算机组成原理:如何衡量计算机的性能
- 计算机组成原理:可以从哪些方面提升计算机性能
- 计算机组成原理:存储器层次结构全景
- 性能:磁盘读写原理、分类与性能指标
- 性能:Linux磁盘IO的工作原理
- 性能:如何迅速分析出系统CPU的瓶颈在哪⾥
- 性能:CPU性能优化的几个思路
- 性能:如何减少延迟提升内存分配效率
- 性能:free、vmstat、top、slabtop、sar监测系统内存
- 性能:ps、valgrind、ipcs诊断特定进程内存问题
- 性能:操作系统是如何影响应用程序执行时间的
- linux操作系统:进程内存布局
- linux操作系统:物理内存管理
- Unix/Linux编程:虚拟内存管理
- 计算机组成原理:Linux是怎么管理内存的(小结)
- C/C++面试:请描述C/C++程序的内存分区
HTTP
- HTTP:HTTP的发展历史
- HTTP:header头总结
STL
- C/C++编程:静态数组array
- C/C++编程:动态数组vector原理分析
- C/C++编程:双端队列deque的使用
- C/C++编程:双端队列deque原理分析
- C/C++编程:双向链表list的使用
- C/C++编程:双向链表ist源码分析
- C/C++编程:单向链表forward_list的使用
- C/C++编程:单向链表forward list原理分析–待续
- C/C++编程:关联式容器set/multisets、maps/multimaps
源码阅读
- ZLToolKit源码阅读:概述
- ZLToolKit源码阅读:工具模块之消息广播器
- ZLToolKit源码阅读:任务队列与线程组
- ZLToolKit源码阅读:线程负载计数器
- ZLToolKit源码阅读:任务执行器
redis
- redis:redis的内存消耗
- redis:redis的内存管理
- redis:redis的内存占用优化
网络编程
- Unix/Linux编程:五种I/O模型 – 为什么要引入IO多路复用
- Unix/Linux编程:为什么要引入多种IO模型
- Unix/Linux编程:信号驱动IO
- Unix/Linux编程:epoll
- Unix/Linux编程:poll
- Unix/Linux编程:select
设计模式
- 设计模式:模板方法模式(template method)—将具体处理交给子类
- 设计模式:工厂模式(Factory Pattern)—将实例的生成交给子类
- 设计模式:单例模式(singleton Pattern)—只生成一个实例
- 设计模式:原型模式(Prototype Pattern)—通过复制生成实例
- 设计模式:组合模式(Builder Pattern)—组装复杂的实例
- 设计模式:抽象工厂模式(Abstract Factory)—将关联零件组装成产品
- 设计模式:桥接模式(Bridge Pattern)—将类的功能层次结构与实现层次结构分离
- 设计模式:策略模式(Strategy Pattern)—整体的替换算法
多线程
- Unix/Linux编程:线程
- Unix/Linux编程:POSIX线程的创建与退出
- Unix/Linux编程:互斥锁与条件变量
- Linux C/C++编程:读写锁
- Unix/Linux编程:条件变量
- Unix/Linux编程:线程私有存储空间
- C/C++编程:线程私有空间封装
- Unix/Linux编程:线程取消
- C/C++编程:线程属性pthread_attr_t
- Linux C/C++编程:prctl与pthread_setname_np
- C/C++编程:准确获取多线程序运行时间
- golang:多线程编程
- Unix/Linux编程:将线程用于并发(TCP)
编程范式
- C/C++编程:尽可能的使用const
- C/C++编程:确定对象在使用前就已经先被初始化了
- C/C++编程:了解C++默默编写并调用了哪些函数
- C/C++编程:如果不想使用编译器自动生成的函数,就应该明确拒绝
- C/C++编程:为多态基类声明virtual析构函数 – 这里可以学习工厂模式
- C/C++编程:不要在析构中抛出异常
- C/C++编程:绝对不要在构造和析构函数中调用虚函数
- 不要在构造函数中调用虚函数的原因:因为父类对象会在子类之前进行构造,此时子类部分的数据成员还未初始化, 因此调用子类的虚函数是不安全的,故而C++不会进行动态联编。
- 不要在析构函数中调用虚函数的原因:析构函数是用来销毁一个对象的,在销毁一个对象时,先调用子类的析构函数,然后再调用基类的析构函数。所以在调用基类的析构函数时,派生类对象的数据成员已经“销毁”,这个时再调用子类的虚函数已经没有意义了
- C/C++编程:在operator=中处理自我赋值
- C/C++编程:复制对象时勿忘其每一个成分
- C/C++编程:以对象管理资源
- C/C++编程:小心资源管理类的拷贝行为
- C/C++编程:在资源管理类中提供对原始资源的访问 – -这里有隐式和显示转换函数的示例
- C/C++编程:以独立语句将newed对象置于智能指针
- C/C++编程:让接口容易被正确使用,不易被误用
- C/C++编程:设计类如同设计类型
- C/C++编程:宁以pass-by-reference-to-const替换pass-by-value
- C/C++编程:必须返回对象时,别妄想返回其引用
- C/C++编程:将成员变量声明为private
- C/C++编程:宁以non-member、non-friend替换member函数
- C/C++编程:如果所有参数都需类型转换,请为此采用non-member函数 — 混合式运算
- C/C++编程:考虑写出一个不抛异常的swap函数 – 为标准模板建立特化版本、如何快速交换大容量类[pimpl(pointer to implementation)手法]、swap原理、偏特化类模板、偏特化函数模板
- C/C++编程:尽量延迟变量定义式出现的时间
- C/C++编程:尽量少做转型动作
- C/C++编程:尽量使用C++风格的例子转换
- C/C++编程:避免返回handles指向对象内部成分
- C/C++编程:为“异常安全”而努力是值得的
- C/C++编程:慎用内联
- C/C++编程:将文件中的编译依存关系降到最低 – 这里可以学到接口类是怎么实现的(工厂模式、抽象基类)
- C/C++编程:确定你的public继承塑模出is-a关系
- C/C++编程:避免隐藏继承而来的名称
- C/C++编程:区分接口继承和实现继承 — 这一章,值得看好几遍,一定要非常熟悉
- C/C++编程:考虑虚函数以外的其他选择 ---- 三种实现策略模式的方法(函数指针、function、指向另一个继承体系的虚函数),nvi(non-virtual interface)实现的模板方法设计模式
- C/C++编程:绝不重新定义继承而来的non-virtual函数
- C/C++编程:绝不重新定义继承而来的缺省参数值 — 动态绑定和静态绑定、nvi(non-virtual interface)实现的模板方法设计模式
- C/C++编程:通过复合(composition)塑膜出has-a或者”根据某物实现出“
- C/C++编程:明智而审慎的使用private继承 —这里可以学习阻止派生类重新定义虚函数的方法
- C/C++编程:明智而审慎的使用多重继承 — 多重继承的一个使用场景值得一看
- C/C++编程:了解隐式接口和编译器多态 — 无聊
- C/C++编程:了解typename的双重意义 — 必须要用typename的情况
- C/C++编程:学习处理模板化基类的名称
- C/C++编程:将参数无关的代码抽离模板
- C/C++编程:运用member函数模板接受所有兼容类型 — 为什么要引入成员函数模板
- C/C++编程:如果所有参数都需类型转换,请为此采用non-member函数
- C/C++编程:请使用traits classes表现类型信息
- C/C++编程:了解new-handler的行为
- C/C++编程:了解new和delete的合理替换时机
- C/C++编程:编写new和delete时需要遵守的规则
- C/C++编程:写了placement new也要写placement delete
C++中的oop
- "继承"可以是单一继承或者多重继承。每一个继承连接(link)可以是public、protected或private,也可以是virtual或者non-virtual。然后是成员函数的各个选项:virtual?non-virtual?以及成员函数和其他语言特性的交互影响:缺省参数值和virtual函数有什么交互影响?继承如何影响C++的名称查找规则?设计选项有哪些?如果class的行为需要修改,virtual是最佳选择吗?
- C++不同特性的真正意义,也就是当你使用某个特定构建你真正想要表达的意思。比如”public继承“意味着"is-a",如果你尝试让它带着其他语义,就会惹祸上身。通信,virtual函数意味着”接口必须被继承“,non-virtual函数意味着”接口和实现都必须被继承“
more effictive c++
- C/C++编程:引用和指针的使用场合
- C/C++编程:不要对数组使用多态
- C/C++编程:避免无用的缺省构造函数
- C/C++编程:慎用类型转换函数
- C/C++编程:自增、自减操作符前缀形式和后缀形式的区别
- C/C++编程:禁止异常信息传递到析构函数之外
- C/C++编程:理解”抛出一个异常“与”传递一个参数“或“调用一个虚函数“间的差异
- C/C++编程:建议通过引用捕获异常
- C/C++编程:慎用异常规格
- C/C++编程:了解异常处理的系统开销
- C/C++编程:lazy evaluation — 有些例子不太赞同,这一节我看太难看了
- C/C++编程:理解临时对象的来源
- C/C++编程:通过重载避免隐式类型转换
- C/C++编程:考虑用运算符的赋值形式(op+=)取代其单独形式(op+)
- C/C++编程:理解虚函数、多继承、虚基类和RTTI的代价 — 这章挺有意思的
- C/C++编程:将构造函数和非成员函数虚拟化 – 这章的知识点我不熟知,值得一看
- C/C++编程:限制某个类所能产生的对象数量 – 很有用,值得一看
- C/C++编程:要求或禁止在堆中产生对象 – 不太实用
- C/C++编程:引用计数
- C/C++编程:代理类
- C/C++编程:选择合适的容器
- C/C++编程:不要试图编写独立于容器类型的代码
https://www.linuxprobe.com/effective-c-pdf.html
语言特性
学习特性之前,必须了解的:
- C/C++编程:被弃用的特性
- C/C++编程:如何编写与C兼容的代码
一些语言特性:
- C/C++编程: __attribute__
- C/C++编程:__attribute__((aligned(n)))、__attribute__((packed))、__alignof 【对齐】
- C/C++编程:__attribute__((constructor))、 __attribute__((destructor))
- C/C++编程:__attribute((__ noreturn))
- C/C++编程:__attribute__((format(printf, a, b)))
- C/C++编程:__attribute__((deprecated))
其他:
- C/C++编程:0长度数组详解
- C/C++编程:变长数组
- C/C++编程:内嵌函数
- C/C++编程:命名空间
- C/C++编程:头文件
- C/C++编程:错误(error)处理和异常(exception)处理
- C/C++编程:数值的极值
语言可用性
当我们声明、定义一个变量或者常量,对代码进行流程控制、面向对象的功能、模板编程等这些都是运行时之前,可能发送在编写代码或编译器编译代码时的行为。为此,我们通常谈及语言可用性,是指那些发生在运行时之前的语言行为
文件操作
- C/C++编程:打开读取关闭目录
- C/C++编程:chdir改变当前目录
- C/C++编程:遍历目录并删除超过7天的文件
- C/C++编程: 文件操作open/close、fopen与freopen/fclose
- C/C++编程:获取文件状态 (stat, lstat和fstat)、获取打开的文件描述符fileno
- C/C++编程:<stdio.h>中的文件操作
- C/C++编程:创建多级目录
- C/C++编程:获取路径中的文件名
- 深入理解计算机系统: 系统IO
单元测试
- 单元测试:开篇明义
- 单元测试:从0到1学习gtest(CLion)
- 单元测试:CMocka单元测试框架(支持mock功能)
- 单元测试:Test Double
- 单元测试:Mock对象
- C/C++编程:linux下的段错误(Segmentation fault)产生的原因及调试方法
- C/C++编程:static_assert声明
- boost:lightweight_test
- boost:assert
- boost:static_assert
opencv
- opencv:各版本差异与演化,从1.x到4.0
- opencv:win10下qt+OpenCV环境搭建
- opencv:win10下clion+opencv+mingw-64环境搭建
- opencv:centos7中安装opencv4.3.0环境
- opencv:centos7中使用opencv出现错误your GStreamer installation is missing a required plugin
- opencv:图像处理入门基础例子
- opencv:mat、string、char、uchar转换
- opencv:rtsp看视频并保存
boost
注:学习boost一定要看官方文档,这是最好的学习子类,没有之一!
- boost:https://www.boost.org/
- boost:从0到1开发boost(linux、clion)
- boost:asio
- boost:asio与signal_set:异步处理信号
- boost:bind
- boost:function
- boost:ref
- boost:signals2
- boost:timer库学习
- boost:date_time库
- boost:lexical_cast
- boost:assert
- boost:static_assert
- boost:lightweight_test
- boost:math.constants库
- boost:integer库
- boost:rational库
- boost:ratio库
- boost:crc库
- boost:random库
- boost:system库
- boost:chrono库
- boost:filesystem库
- boost与json
实用库
- C/C++编程:从0到1学习libhv(linux、clion)
- C/C++编程:win10下使用cmake+clion编译libhv
- C/C++编程:从0到1学习libuv(linux、Clion)
- C/C++编程:使用libuv获取当前进程的执行路径
- C/C++编程:openssl使用(win10+qt_creator+ qmake)
- C/C++编程:openssl使用(win10+vs2019)
- C/C++编程:openssl使用(centos7+clion)
- C/C++编程:libssh2学习(windows + vs2019 + cmake + vcpkg)
- C/C++编程:libssh2学习(win10 + qt_creator+ qmake + vcpkg)
- C/C++编程:libssh2学习(linux + clion + cmake)
- C/C++编程:redis的cpp库
acl初始化
Qt
- Qt:官网
- Qt:windows下Qt安装
- Qt:CentOS下Qt安装
- Qt:Qt小部件入门编程
- Qt:创建Qt Quick项目
- Qt:创建Qt Widget程序
- Qt:配置项目
- Qt:如何使用qtcreator构建CMake项目
- Qt:如何清除qtcreator欢迎菜单下的历史工程信息
- Qt:如何添加一个xxx.ui文件或者添加xxx.ui&&xxx.cpp&&xxx.h文件
- Qt:解决qt修改完ui文件起不到作用
- Qt:如何使用Qt创建库并在应用程序中使用它
- Qt:qmake的CONFIG、TEMPLATE变量
- Qt:qmake创建项目文件
- Qt:项目名称修改方法(简单粗暴笨方法)
- Qt:Linux使用appimage打包程序
- Qt:槽函数入门
- Qt:错误Could not decode “*.cpp“ with “UTF-8“ - encoding. Editing not possible
编译工具等
- win10:mingw-w64安装教程
- clion:win10下安装clion
- clion:linux下clion安装教程
- clion:win10远程Linux服务器开发调试
- clion:debug模式带参数运行程序
- clion:调试段错误
- clion:win10下生成C动态库(上)
- clion:win10下调用C动态库(下)
- clion:win10下生成C静态库(上)
- clion:win10下调用C静态库(下)
- clion:nitialization with static storage duration may throw an exception cannot be caught
- Visual Studio:windows10安装
- Visual Studio 2019:创建控制台应用
- Visual Studio 2019:生成以及运行项目
- Visual Studio 2017:创建动态DLL项目
- git:什么是git
- git:centos7中安装git
- git:git的三种状态以及三个阶段
- git:初次运行git前的配置
- git:获取或者创建一个git仓库
- cmake 从入门到入土
- C/C++编程:.msi文件和.exe文件的区别
软件安装与使用
- vmware:安装win10虚拟机
- vmware:安装centos7虚拟机
- Linux:sftp同步文件
- Linux:rsync同步文件夹
- Linux:使用windows或者Linux免密登陆、免密上传文件远程linux
- vmware:centos7安装 VMTools(安装VMware Tools显示灰色正确解决办法)
- centos: 禁止自动锁屏
- centos:虚拟机扩展磁盘空间
打算要做的
- 自己实现一个百度网盘
- 自己实现一个聊天程序
乱起八糟的资源
C++搭建http服务器
- https://github.com/yhirose/cpp-httplib, 还没有学习
- https://github.com/hongliuliao/ehttp,待研究
mongoose
- https://github.com/cesanta/mongoose
- https://github.com/tashaxing/CppHttpDemo
这个不知道怎么发送post请求
libhv
- https://github.com/ithewei/libhv/blob/master/unittest/hmutex_test.c
Simple-Web-Server
https://github.com/eidheim/Simple-Web-Server/blob/master/client_http.hpp
acl学习入门
工具软件
- docker:是什么
- docker: linux下使用脚本安装docker
- docker:镜像命令
- docker:容器命令
- docker:使用 Dockerfile 创建镜像
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/613.html