摘要:client #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <time.h> #include <arpa/inet.h> #include <sys/socket.h>
阅读全文
摘要:Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信。socket 原本是为网络通讯设计的,但后来在 socket 的框架上发展出一种 IPC 机制,就是 UNIX domain soc
阅读全文
摘要:实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #includ
阅读全文
摘要:#include <iostream> #include <utility> #include <thread> #include <chrono> #include <functional> #include <atomic> #include <vector> using namespace s
阅读全文
摘要:处理 SIGPIPE 在网络编程中经常会遇到SIGPIPE信号,默认情况下这个信号会终止整个进程,当然你并不想让进程被SIGPIPE信号杀死。我们不禁会这样思考: 在什么场景下会产生SIGPIPE信号? 要怎样处理SIGPIPE信号? SIGPIPE产生的原因是这样的:如果一个 socket 在接收
阅读全文
摘要:如果我们在调用accept函数返回之前, 该客户端TCP发送了一个RST(复位)。在服务器中, 表现为该连接仍在TCP队列中, 等待服务器进程调用accept的时候RST到达。此时返回的套接字是一个已连接,但是却有接受了RST的套接字。 模型图如下: #include <stdio.h> #incl
阅读全文
摘要:#include <iostream> #include <memory> #include <thread> #include <chrono> #include <mutex> struct Test { Test() { std::cout << " Test::Test()\n"; } ~T
阅读全文
摘要:weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用计数的增加或减少。没有重载 *和 -> 但可以使用lock获得一个可用的shared_ptr对象 weak_pt
阅读全文
摘要:Rvalue Reference 右值引用 当赋值操作的右边是右值(rvalue),左边的对象不需要特意分配内存去存放这个拷贝(copy),而可以搬移(move)右边对象的资源。 用于解决不必要的拷贝和实现完美转发(perfect forwarding)。 Move Semantics 移动语义 m
阅读全文
摘要:C++ map容器插入具有相同键的键值对的覆盖问题 map容器插入键值对的方法一般有两种 map["key"] = value; map.insert(make_pair<>("", "")); #include <map> #include <iostream> using namespace s
阅读全文
摘要:atomic_fetch_and emplate (integral) (1) template <class T> T atomic_fetch_and (volatile atomic<T>* obj, T val) noexcept; template <class T> T atomic_f
阅读全文
摘要:map默认是按key值从小到大排序的 按value值排序: 想直接用sort排序是做不到的,sort只支持数组、vetctor等的排序,所以我们可以先把map装进pair里,然后再放入vector,自定义sort实现排序 假设已有一组map<string,int>类型的数mp,则具体实现过程为: v
阅读全文
摘要:#include <iostream> #include <thread> int main() { int id = 9; std::thread t([&id](){ std::cout << "thread function and id " << id << std::endl; }); s
阅读全文
摘要:一. 前言 本文总结std库中unsorted_map和map的区别。 二. 区别示意图map unordered_mapOrdering increasing order ( by default ) no orderingImplementation Self balancing BST ( l
阅读全文
摘要:并发编程作为 C++11 系列的一个重大更新部分,值得我们去探究,并应用其提升程序的性能。本系列参考了其他一些文章,对 C++11 并发编程的一些要点进行了总结,并给出一些示例。 condition_variable 类介绍 std::condition_variable 是 C++11 多线程编程
阅读全文
摘要:从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk 和 mmap(不考虑共享内存)。 brk 的实现方式是将 Data Segment 的最高地址指针 _edata 往高地址推(分配的内存小于 128k )。 mmap 的实现方式是在 Memory Mapping Segme
阅读全文
摘要:背景 平时看代码时,也会使用到std::lock_guard,但是std::unique_lock用的比较少。在看并发编程,这里总结一下。方便后续使用。 std::unique_lock也可以提供自动加锁、解锁功能,比std::lock_guard更加灵活。 std::lock_guard std:
阅读全文
摘要:总结: 1.不要对临时变量进行改变。要传递临时变量,得用常量引用。 2. 当引用不需要更改时,用const引用。 问题: struct Sales_data { Sales_data() = default; Sales_data(std::string &str){} Sales_data& co
阅读全文
摘要:#include <iostream> #include <future> #include <thread> using namespace std; class Person { public: Person(int v) { value = v; std::cout << "Cons" <<v
阅读全文