![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 81
梦花火
服务端爱好者,个人博客地址http://justsolitude.com/
展开
-
C++实现身份证校验和归属地查询
描述:我国国标〖GB 11643-1999〗中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其校验码(最后一位)计算方法和步骤为:(1)十七位数字本体码加权求和公式S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和其原创 2017-07-30 15:56:51 · 1854 阅读 · 3 评论 -
ftp关键技术一:账户验证
title: ftp关键技术一:账户验证对于Linux端的ftp服务的而言,账户即为Linux端的用户。一般步骤是:以root用户权限启动ftp服务获取客户端的验证信息从系统获取用户名对应的加密后的密码对客户端发过来的密码进行对应的加密,并对比如何验证是否以root用户启动服务?我们可以通过getuid()函数获取当前程序运行的uid。一般root用户的uid =0。所以可以通过以下方式验证是否...原创 2018-05-18 17:10:34 · 842 阅读 · 0 评论 -
记一次做ftp服务器项目,遇到的字节顺序的问题。
记一次做ftp服务器项目,遇到的字节顺序的问题。———(转)为什么需要htons(), ntohl(), ntohs(),htons() 函数ps:近期在做FTP服务器项目,遇到一个深坑,当你在系统中获得port的时候,对于linux系统而言,获得的port 是 unsigned short 类型的,在使用转化的时候,就应该使用htons()函数,而不是htonl(),因为这个问题,排查问题,排查了原创 2018-04-29 18:14:57 · 275 阅读 · 1 评论 -
C++11开发中的Atomic原子操作
原文链接:https://www.cnblogs.com/the-tops/p/6347584.html?utm_source=itdadao&utm_medium=referral原子操作在多线程开发中经常用到,比如在计数器,序列产生器等地方,这类情况下数据有并发的危险,但是用锁去保护又显得有些浪费,所以原子类型操作十分的方便。原子操作虽然用起来简单,但是其背景远比我们想象的要复...转载 2018-07-28 18:02:18 · 514 阅读 · 0 评论 -
浅析线程安全的对象生命期的管理
1.前言:c++与其他面向对象语言不同,没有gc,c++要求程序员自己管理对象的生命,在并发编程环境下显得尤为困难。当一个对象能被多个线程同时看到时,那么对象的销毁时机就会变得模糊不清,可能出现多种竞争条件(race condition): 在即将析构一个对象时,从何知道别的线程是否正在执行该对象的成员。 如何保证在执行成员的函数期间,对象不会被另一个线程析构。 在调...原创 2018-07-26 14:22:24 · 226 阅读 · 0 评论 -
漫谈io复用和高性能服务框架
前言:这篇博客可能会写的有点杂乱,毕竟是想到哪里写到哪里,至少算是一个总结性的文章。 一.IO复用的生 二.IO复用实现 三.统一事件源 四.Reactor模型 五.有限状态机一.IO复用的生 首先我们先说说不用IO复用时,我们所谓的并发服务器的极限。简单的想,我们可以用一个线程来负责一个链接,但是线程个数又不是可以无限增大的...原创 2018-07-26 14:23:38 · 195 阅读 · 0 评论 -
ftp关键技术二:nobody进程创建和使用(二)
本文将从以下几个方面具体阐述nobody进程的前世今生 如何给予nobody权限 nobody进程负责的任务以及实现 如何给予nobody权限先看看在系统中ftp服务器是如何工作的吧[root@VM_0_11_redhat ~]# ps -ef | grep miniftproot 6362 1 0 May13 ? 00:0...原创 2018-07-26 14:27:26 · 707 阅读 · 3 评论 -
ftp关键技术二:nobody进程创建和使用(一)
本文将从以下几个方面具体阐述nobody进程的前世今生 为什么需要nobody进程? 进程间通信的协议制定 为什么需要nobody进程(1)为什么要使用nobody进程和服务进程两个进程? 1.在PORT模式下,服务器会主动建立数据通道连接客户端,服务器可能就没有权限做这种事情,就需要nobody进程来帮忙。 Nobody进程会通过unix域协议(本机通信效率高) ...原创 2018-07-26 14:28:36 · 1803 阅读 · 0 评论 -
ftp关键技术四:空闲断开
首先提出一个问题,我们为什么需要空闲断开? 对于服务端而言,由于连接数和内存的限制,我们不可能对一个长时间处于不活跃的客户端,单独维护一个fd,一个进程/线程始终为其服务,fd单个进程上限默认值为1024,由于内存的限制,也不能无限制的分配出进程或者线程为其服务,这个时候我们就需要断开在规定时间内没有任何动作的客户端,腾出内存为其他客户端服务。第二个问题,我们要基于什么实现空闲断开呢?...原创 2018-07-26 14:29:20 · 1416 阅读 · 0 评论 -
ftp关键技术五:限制链接数
通常在一些网站中,为了防止恶意大量的访问和超大量访问导致内存占满,会对单个链接的连接数和总链接数做出一个限制。 以本FTP服务端为例,假设每个客户链接,我们都需要两个进程来处理它,假设了一个客户需要分配总共1M的栈内存出来,1000个链接,接近1G的内存就没有了。另一方面,如果单个ip大量链接服务端,会占用大量的带宽、内存和文件句柄,实际上每个用户(ip)只需要两三个链接就可以解决问题,所...原创 2018-07-26 14:30:33 · 3729 阅读 · 0 评论 -
muduo源码学习笔记(2)
前言: 对于muduo库,我觉得,光Linux多线程上提到的一些实现,还是不够的,在base/里面,还有/net里面提供了很多不错的实现,值得去学习,暑假算是看看muduo的百分之八十的源码,并对其进行了一次实现,(剩下的在最近总结的时候,也会开始看看,并实现一遍),对于muduo库,简单谈谈自己对其实现的理解。日志缓存流LogStream 在muduo实现的基础日志类,一共用来三...原创 2018-09-12 21:23:05 · 1126 阅读 · 0 评论 -
从基本排序算法看时间复杂度
在介绍时间复杂度分析方法前,我们首先来明确下算法的运行时间究竟取决于什么。直观地想,一个算法的运行时间也就是执行所有程序语句的耗时总和。然而在实际的分析中,我们并不需要考虑所有程序语句的运行时间,我们应该做的是集中注意力于最耗时的部分,也就是执行频率最高而且最耗时的操作。也就是说,在对一个程序的时间复杂度进行分析前,我们要先确定这个程序中哪些语句的原创 2018-03-30 16:38:43 · 380 阅读 · 0 评论 -
自己实现一个简单的读写锁
自己实现一个简单的读写锁原创 2017-11-14 14:19:10 · 1777 阅读 · 0 评论 -
C++实现大数运算 加法部分。
由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。大数运算主要有加、减、乘三种方法。所以我就打算做一个大数运算的项目。其中每个数字,是动态分配的字符串的形式进行存储和计算的。下面是每个数的类的组成class Bigint {public: Bigint() {} Bigi原创 2017-08-08 19:14:36 · 857 阅读 · 0 评论 -
C/C++ 内存布局详解(经典
最近看到了一篇非常好的写内存的博客,正好适用于刚入C++不久的我,转载过来,分享给大家。原帖网址http://blog.sina.com.cn/s/blog_60c8379d01015a96.html转载 2017-08-10 20:09:52 · 276 阅读 · 0 评论 -
C++中关于无法无法解析外部错误的解决方案
首先 为什么写这个博客,前几日遇到了一个问题,就是在用类模板写堆的时候,出现了这个问题,当时花了好久,解决了那个问题,今天在看C++Primer Plus的时候在函数指针的时候,出现了相同的问题。下面上代码#includeusing namespace std;const double *f1(const double ar[], int n);const double *f2(cons原创 2017-07-27 14:50:47 · 1940 阅读 · 0 评论 -
多项式及其计算
昨天加上今天 想把之前学过的链表进行复习一遍 就花了一个下午加一个晚上的时间,把多项式及其计算做一下,然而让人遗憾的是 我一直想用string 来创建一个多项式 结果发现不行 ==Polynomial.h#includeusing namespace std;struct Term //多项式的节点定义{ double coef; //系数 int exp; //指原创 2017-07-28 19:46:42 · 799 阅读 · 0 评论 -
用三重指针实现HaffTree
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。原创 2017-07-13 15:42:38 · 574 阅读 · 0 评论 -
判断单向链表是否回文
要求 : 时间复杂度O(n) 空间复杂度O(1);原创 2017-07-14 19:00:21 · 280 阅读 · 0 评论 -
LintCode周算法总结
实现赋值运算符重载函数,确保:新的数据可准确地被复制旧的数据可准确地删除/释放可进行 A = B = C 赋值class Solution {public: char *m_pData; Solution() { this->m_pData = NULL; } Solution(char *pData)原创 2017-07-25 17:11:24 · 262 阅读 · 0 评论 -
浅谈 STL 中的空间配置器一点小小心得。
网上 其他很多博主,写了很多STL的解析,大致和书上讲的都差不多,最近学到了空间配置器这部分,我就谈谈在学习STL 中的小小心得吧,要是有不对的地方,请大家指出。首先看看下面这段代码,这中写法贯彻整个STL typedef size_t size_type; typedef _Ty* pointer; typedef const _Ty* const_pointer; t原创 2017-08-18 17:03:35 · 232 阅读 · 0 评论 -
#深入理解System V原理
深入理解System V原理原创 2017-11-07 17:24:37 · 506 阅读 · 0 评论 -
浅谈UNIX网络编程system V IPC机制
一.System V IPC 的构成 1.system v消息队列 2.system v信号量 3.system v共享内存 我们把这三种工具统称为System V IPC的对象,每个对象都具有一个唯一的IPC标识符(identifier)。原创 2017-11-03 21:07:43 · 427 阅读 · 0 评论 -
muduo源码学习笔记(1)
前言: 对于muduo库,我觉得,光Linux多线程上提到的一些实现,还是不够的,在base/里面,还有/net里面提供了很多不错的实现,值得去学习,暑假算是看看muduo的百分之八十的源码,并对其进行了一次实现,(剩下的在最近总结的时候,也会开始看看,并实现一遍),对于muduo库,简单谈谈自己对其实现的理解。用RAII管理你的锁 Posix Thread内定义的一系列的mute...原创 2018-09-10 20:17:44 · 792 阅读 · 0 评论