- 博客(380)
- 资源 (2)
- 收藏
- 关注
原创 C语言实现单链表操作
SLIST_H #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node...
2020-01-29 16:33:33
357
转载 实现Linux select IO复用C/S服务器代码
服务器端#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<sys/stat.h>#include<arpa/inet.h>#include &...
2019-10-25 14:25:06
229
转载 TCP服务器/客户端实例(C/C )
1.1、Linux下的TCP服务器:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/types.h>#include <sys/so...
2019-10-21 18:25:57
313
转载 Linux下网络socket编程——实现服务器(select)与多个客户端通信
一、关于socket通信服务器端工作流程:调用 socket() 函数创建套接字 用 bind() 函数将创建的套接字与服务端IP地址绑定 调用listen()函数监听socket() 函数创建的套接字,等待客户端连接 当客户端请求到来之后 调用 accept()函数接受连接请求,返回一个对应于此连接的新的套接字,做好通信准备 调用 write()/read() 函数和 s...
2019-10-18 16:43:01
965
转载 linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
一、介绍基于TCP协议通过socket实现网络编程常用API1、读者如果不是很熟悉,可以先看我之前写的几篇博客,有socket,地址结构的理解,更加方便读者理解地址分别是:1)、http://blog.csdn.net/u011068702/article/details/564799272)、http://blog.csdn.net/u011068702/article/de...
2019-10-18 16:42:03
1066
转载 链表实现生产者消费者
这里的代码围绕一个生产者和一个消费者来分析,生产者生产一个产品,消费者才能使用一个产品,消费者和生产者是同步关系。一:不加同步互斥锁pthre#include<stdio.h> #include<stdlib.h>#include<pthread.h>typedef struct _Node{struct _Node* next;...
2019-07-28 21:56:29
267
转载 python装饰器详解
https://blog.csdn.net/xiangxianghehe/article/details/77170585你会Python嘛?我会!那你给我讲下Python装饰器吧!Python装饰器啊?我没用过哎以上是我一个哥们面试时候发生的真实对白。———————————————-分割线——————————————————————————简言之,python装饰器就是用...
2018-09-05 23:23:09
167
转载 12步轻松搞定python装饰器
http://python.jobbole.com/81683/呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,...
2018-09-05 23:21:16
146
转载 c++继承父类的子类,如何调用父类的同名函数?
https://blog.csdn.net/qq_26399665/article/details/52080215子类调用父类的同名函数: 子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。 子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名...
2018-08-03 21:58:33
13649
转载 循环服务器,并发服务器模型以及I/O多路转接模型
https://blog.csdn.net/xinianbuxiu/article/details/53455784一、基于TCP/IP协议的基本循环服务器tcp_server.c #include <stdio.h> #include <stdlib.h> #include <string.h> ...
2018-08-02 23:14:50
252
转载 Linux C 实现一个简单的线程池
https://www.cnblogs.com/GyForever1004/p/9185240.html线程池的定义线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理...
2018-07-24 12:03:10
207
转载 一个通用纯C队列的实现
https://blog.csdn.net/kxcfzyk/article/details/31728179队列并不是很复杂的数据结构,但是非常实用,这里实现一个队列是因为在我的另一篇博客非常精简的Linux线程池实现中要用到。 队列API定义如下: //queue.h #ifndef QUEUE_H_INCLUDED #define Q...
2018-07-24 00:30:14
1960
转载 非常精简的Linux线程池实现(一)——使用互斥锁和条件变量
https://blog.csdn.net/kxcfzyk/article/details/31719687线程池的含义跟它的名字一样,就是一个由许多线程组成的池子。有了线程池,在程序中使用多线程变得简单。我们不用再自己去操心线程的创建、撤销、管理问题,有什么要消耗大量CPU时间的任务通通直接扔到线程池里就好了,然后我们的主程序(主线程)可以继续干自己的事去,线程池里面的线程会自动去执行这...
2018-07-24 00:29:13
265
转载 Linux探秘之用户态与内核态
https://www.cnblogs.com/bakari/p/5520860.html一、 Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU...
2018-07-23 19:32:38
240
转载 C++空类的大小
https://blog.csdn.net/lihao21/article/details/47973609本文中所说是C++的空类是指这个类不带任何数据,即类中没有非静态(non-static)数据成员变量,没有虚函数(virtual function),也没有虚基类(virtual base class)。 直观地看,空类对象不使用任何空间,因为没有任何隶属对象的数据需要存储。然而,C+...
2018-07-23 18:53:30
288
转载 epoll 水平触发与边缘触发
https://blog.csdn.net/lihao21/article/details/67631516?ref=myreadepoll也是实现I/O多路复用的一种方法,为了深入了解epoll的原理,我们先来看下epoll水平触发(level trigger,LT,LT为epoll的默认工作模式)与边缘触发(edge trigger,ET)两种工作模式。使用脉冲信号来解释LT和ET可能...
2018-07-23 18:12:02
149
转载 聊聊同步、异步、阻塞与非阻塞
近来遇到了一些常见的概念,尤其是网络编程方面的概念,如:阻塞、非阻塞、异步I/O等等,对于这些概念自己也没有太清晰的认识,只是很模糊的概念,说了解吧也了解,但是要让自己准确的描述概念方面的具体细节,却说的不那么准确,这也是自己在这几个方面也没有细细考究过的原因吧。经过看了些这几个概念的资料,发现同步、异步、阻塞、非阻塞的概念其实也并不难以理解,在此写下此文,欢迎拍砖,希望多多交流。1 同步与异...
2018-07-23 17:13:28
212
转载 聊聊Linux 五种IO模型
一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了,要理解同步、异步、阻塞与非阻塞重要的两个概念点了,没有看过的,建议先看这篇博文理解这两个概念点。在认知上,建立统一的模型。这样,大家在继续看本篇时,才不会理解有偏差。那么,在正式开始讲Linux IO模型前,比如:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本...
2018-07-23 17:12:32
157
转载 【Linux基础】Linux的5种IO模型详解
引入为了更好的理解5种IO模型的区别,在介绍IO模型之前,我先介绍几个概念1.进程的切换(1)定义为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。即从用户态(较低的3G字节)切换到内核态(最高的1G字节),非常消耗系统资源。(2)过程保存处理机上下文,包括程序计数器和其他寄存器。 更新PCB信息。 把进程的PCB移入相应的队...
2018-07-23 17:11:48
223
转载 C++子类父类成员函数的覆盖和隐藏实例详解
https://www.jb51.net/article/117380.htm函数的覆盖 覆盖发生的条件:(1) 基类必须是虚函数(使用virtual 关键字来进行声明) (2)发生覆盖的两个函数分别位于派生类和基类 (3)函数名和参数列表必须完全相同函数的隐藏 隐藏发生的条件:(1)子类和父类的函数名相同,参数列表可以不一样看完下面的例子就明白了#include "iostream" ...
2018-07-14 15:26:13
852
转载 C++子类对象隐藏了父类的同名成员函数(隐藏篇)
https://blog.csdn.net/alpha_love/article/details/75222175#include <iostream>#include <stdlib.h>#include <string>using namespace std;/** * 定义人类: Person * 数据成员: m_strName * 成员函数: attac...
2018-07-14 14:49:09
693
转载 浅谈dup和dup2的用法
https://blog.csdn.net/u012058778/article/details/78705536一、dup和dup2函数 这两个函数都可以来复制一个现有的文件描述符,他们的声明如下: #include <unistd.h> int dup(int fd); int dup2(int fd, int fd 2);123关于dup函数,当我们调用它的时候,dup会返...
2018-07-13 22:28:53
265
转载 Linux网络编程——tcp并发服务器(epoll实现)
https://blog.csdn.net/lianghe_work/article/details/46551871通过epoll实现tcp并发回执服务器(客户端给服务器发啥,服务器就给客户端回啥)代码如下:#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h...
2018-07-13 21:57:42
459
转载 C++的单例模式与线程安全单例模式(懒汉/饿汉)
https://www.cnblogs.com/qiaoconglovelife/p/5851163.html1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码: 1...
2018-07-13 21:57:08
135
转载 MSG_PEEK标志
https://blog.csdn.net/aspnet_lyc/article/details/28937229MSG_PEEK标志可以用来读取套接字接收队列中可读的数据,一些情况会用到它,比如为了避免不阻塞而先检查套接字接收队列中可读的数据长度,再采取相应操作。当然,不阻塞也可采取其他的方法,例如非阻塞式I/O。MSG_PEEK标志会将套接字接收队列中的可读的数据拷贝到缓冲区,但不会使套接子接...
2018-07-13 21:56:50
2024
转载 Linux网络编程——I/O复用函数之epoll
https://blog.csdn.net/lianghe_work/article/details/46544567一、epoll概述epoll 是在 2.6 内核中提出的,是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说,epoll 更加灵活,没有描述符限制。epoll 使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放...
2018-07-11 17:04:32
133
转载 Linux网络编程——tcp并发服务器(poll实现)
https://blog.csdn.net/lianghe_work/article/details/46535859想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》代码:#include <string.h>#include <stdio.h>#include <stdlib.h>#include <uni...
2018-07-11 17:03:51
326
转载 Linux网络编程——I/O复用之poll函数
https://blog.csdn.net/lianghe_work/article/details/46534029一、回顾前面的selectselect优点:目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点select缺点:1.每次调用 select(),都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大,同时每次调用 select() 都需要在内核遍历传递进...
2018-07-11 17:03:16
197
转载 Linux网络编程——tcp并发服务器(I/O复用之select)
https://blog.csdn.net/lianghe_work/article/details/46519633与多线程、多进程相比,I/O复用最大的优势是系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。代码示例:#include <stdio.h> #include <unistd.h>#include <stdlib.h>#inc...
2018-07-11 17:02:39
193
转载 Linux网络编程——I/O复用之select详解
https://blog.csdn.net/lianghe_work/article/details/46506143一、I/O复用概述I/O复用概念:解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调I/O复用使用的场合:1.当客户处理多个描述符(通常是交互式输入、网络套接字)时,必须使用I/O复用。2.tcp服务器既要处理监听套接字,又要处理已连接...
2018-07-11 17:02:03
171
转载 Linux网络编程——tcp并发服务器(多线程)
https://blog.csdn.net/lianghe_work/article/details/46504243tcp多线程并发服务器多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程...
2018-07-11 17:00:56
2647
转载 Linux网络编程——tcp并发服务器(多进程)
https://blog.csdn.net/lianghe_work/article/details/46503895一、tcp并发服务器概述一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。二、多进程并发服务器在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客...
2018-07-11 17:00:00
1758
转载 socket编程 -- epoll模型服务端/客户端通信的实现
https://blog.csdn.net/y396397735/article/details/50680359本例实现如下功能: 支持多客户端与一个服务端进行通信,客户端给服务端发送字符串数据,服务端将字符串中小写转为大写后发送回客户端,客户端打印输出经转换后的字符串。 例如:发送abcde,打印输出ABCDE 服务端源码如下:/*server.c*/#include <stdio.h...
2018-07-11 16:48:18
519
转载 单链表各种操作详解
#include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef ...
2018-07-11 16:00:55
190
转载 单链表逆序的多种方式
template<class T>void List<T>::Inverse() { if(first == NULL) return; LinkNode<T> *p, *prev, *latter; p = first->link; // 当前结点 prev = N...
2018-07-11 12:17:25
503
转载 TCP第四次挥手为什么要等待2MSL
当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢??? 这最主要是因为两个理由:1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传...
2018-07-09 23:42:45
17891
6
转载 Linux C++ 回射服务器
http://blog.csdn.net/qq_25425023/article/details/53914820回射服务器就是服务端将客户端的数据发送回去。 我实现的回射服务器返回增加了时间。 服务端代码,可以很容易看懂: [cpp] view plain copy#include <sys/socket.h> #include <stdio.h> #incl...
2018-07-09 14:18:14
179
转载 string类的基本实现
https://blog.csdn.net/qq_29503203/article/details/52265829在面试中面试官常常会让你写出string类的基本操作,比如:构造函数,析构函数,拷贝构造等等.下面是除此之外的一些操作,希望可以帮助你更好的理解string以便以后的运用:String& operator=(const String& s);char* c_str()...
2018-07-05 15:18:08
364
转载 转圈踢人问题
https://www.cnblogs.com/lanxuezaipiao/p/3339603.html有N个人围一圈依次报数,数到3的倍数的人出列,问当只剩一个人时他原来的位子在哪里?解答:经典的转圈踢人问题,好吧专业一点,约瑟夫环问题,相信大家都会,下面给我的code:int main(){ int N, i, j; printf("Please enter the num...
2018-06-25 23:48:23
248
转载 白话C++系列(27) -- RTTI:运行时类型识别
http://www.cnblogs.com/kkdd-2013/p/5601783.htmlRTTI—运行时类型识别RTTI:Run-Time Type Identification。那么RTTI如何来体现呢?这就要涉及到typeid和dynamic_cast这两个知识点了。为了更好的去理解,那么我们就通过一个例子来说明。这个例子大家已经非常熟悉了,如下:首先定义一个Flyable类,在这个类当...
2018-06-25 22:23:25
267
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人