
Linux网络编程
chudongfang2015
开心开心!!!!!!
展开
-
socket阻塞与非阻塞,同步与异步
转自:http://blog.youkuaiyun.com/hguisu/article/details/7453390socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:转载 2017-07-21 17:06:35 · 346 阅读 · 0 评论 -
__type_traits
之前我们对iterator_traits有了一些了解,现在我们要了解__type_traits。Iterator_traits负责萃取迭代器的特性,__type_traits则负责萃取型别的特性。 对于型别的特性,我们关注的点可能在于对该型别是否需要复杂处理。如果答案是否定的,我们在对这些型别进行构造、析构、拷贝赋值等操作时,就可以采取最有效率的措施,比如不使用析构函数,直接free等转载 2017-07-28 14:59:01 · 517 阅读 · 0 评论 -
__type_traits详解
在STL中为了提供通用的操作而又不损失效率,我们用到了一种特殊的技巧,叫traits编程技巧。具体的来说,traits就是 通过定义一些结构体或类,并利用模板类特化和偏特化的能力,给类型赋予一些特性,这些特性根据类型的不同而异。在程序设计中可以使用这些traits来判 断一个类型的一些特性,引发C++的函数重载机制,实现同一种操作因类型不同而异的效果。traits的编程技巧极度弥补了C++语言的不转载 2017-07-28 14:43:44 · 1579 阅读 · 0 评论 -
static_cast、dynamic_cast、const_cast和reinterpret_cast总结
C++中的类型转换分为两种:隐式类型转换;显式类型转换。而对于隐式变换,就是标准的转换,在很多时候,不经意间就发生了,比如int类型和float类型相加时,int类型就会被隐式的转换位float类型,然后再进行相加运算。而关于隐式转换不是今天总结的重点,重点是显式转换。在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reint转载 2017-07-28 11:32:28 · 973 阅读 · 0 评论 -
Event Loop
Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。JavaScript语言就采用这种机制,来解决单线程运行带来的一些问题。本文参考C. Aaron Cois的《Understanding The Node.js Event Loop》,解释什么是Event Loop,以及它与JavaScript语言的单线程模型有何关系。想要理解Event转载 2017-07-28 00:12:16 · 314 阅读 · 0 评论 -
mutable和volatile
13、mutable和volatile 很少遇到这两个关键字,学嵌入式估计知道后者,深入研究C++的估计知道前者。 (1)mutable 在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可转载 2017-07-27 16:32:09 · 593 阅读 · 0 评论 -
boost::bind 详解
boost::bind是标准库函数std::bind1st和std::bind2nd的一种泛化形式。其可以支持函数对象、函数、函数指针、成员函数指针,并且绑定任意参数到某个指定值上或者将输入参数传入任意位置。1. 通过functions和function pointers使用bind给定如下函数:1 int f(int a, int b)2 {3 return a转载 2017-07-27 16:07:41 · 445 阅读 · 0 评论 -
boost::static_cast、implicit_cast、const_cast、dynamic_cast
在C++中有四种类型转换 1、static_cast:这个是最常用的类型转换,凡是C++隐式执行的类型转换都可以用static_cast显式完成。在隐式转换时有时编译器会有警告信息,但是显示转换就不会有。2、const_cast:从名字可以看出和const有关,这个转换的作用是去除或添加const特性,它可以将一个const变量转换为非const变量,或将一个非const变量转换为co转载 2017-07-26 15:52:58 · 717 阅读 · 0 评论 -
分享一个比较好用的Makefile文件
############################################################# # Generic Makefile for C/C++ Program # # License: GPL (General Public License) # Author: whyglinux <whyglinux AT gmail DOT com> # Dat原创 2017-07-20 18:03:59 · 580 阅读 · 0 评论 -
C/C++中volatile关键字详解
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that转载 2017-07-25 16:19:51 · 307 阅读 · 0 评论 -
fcntl函数详解
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd转载 2017-07-19 16:57:07 · 444 阅读 · 0 评论 -
prctl()函数应用
int prctl ( int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 )这个系统调用指令是为进程制定而设计的,明确的选择取决于option:PR_GET_PDEATHSIG :返回处理器信号; PR_SET_PDEATHSIG :arg2作为处理器信号pd转载 2017-07-22 14:26:34 · 351 阅读 · 0 评论 -
(推荐)智能指针boost::weak_ptr 详解
【1】boost::weak_ptr简介boost::weak_ptr属于boost库,定义在namespace boost中,包含头文件 #include便可以使用。【2】boost::weak_ptr详解智能指针boost::scope_ptr和智能指针boost::shared_ptr就完全可以解决所有单个对象内存的管理问题。这儿咋还多出一个boost::we转载 2017-07-22 11:23:19 · 414 阅读 · 0 评论 -
性能优化:__builtin_expect详解
转自:http://hi.baidu.com/lammy/blog/item/bc5e3d4e869073c3d1c86a89.html在GTK+2.0源码中有很多这样的宏:G_LIKELY和G_UNLIKELY。比如下面这段代码:if (G_LIKELY (acat == 1)) /* allocate through magazine layer */ {转载 2017-07-22 10:50:26 · 1801 阅读 · 2 评论 -
Linux网络编程:进程池 + CGI服务器
前记:这两天在看Linux的网络编程,准备了解一下网络库,对于多线程编程和多进程编程,还是有点模糊,于是就跟着书实现可一个小的进程池。进程池结构图如下:下面给出进程池的代码,进程池被封装在一个processpool类中,包含在processpool中。代码给出了详细的注释:/** * filename: processpool.h * created by cdf ^_^~~ */#ifnd原创 2017-07-21 19:18:19 · 880 阅读 · 0 评论 -
简述epoll下电平触发LT和边沿触发ET的区别
LT 电平触发 高电平触发EPOLLIN 事件 数据可读 内核中的socket接收缓冲区 为空 低电平 不会触发 内核中的socket接收缓冲区 不为空 高电平 会触发EPOLLOUT事件 数据可写 内核中的socket发送缓冲区不满 高电平 内核中的socket发送缓冲区 满 低电平ET 边沿触发 转换的时候触发 由低电平 -> 高电平 才会转载 2018-02-07 14:59:10 · 1091 阅读 · 0 评论