Skip to content

RealChuan/Cpp-Examples

Repository files navigation

Cpp-Examples

代码结构

  1. Algorithm
    1. Search——各种查找算法的实现,以及单元测试和基于google benchmark的性能测试;
      1. std_search_examples——stl中查找算法的例子;
    2. Sort——各种排序算法的实现,以及单元测试和基于google benchmark的性能测试;
      1. std_sort_examples——stl中排序算法的例子;
  2. BinaryTree——二叉树的相关操作,插入、移除、查找、打印;
  3. Breakpad——google breakpad的简单封装;
  4. ByteOrder——判断系统的字节序;
  5. Client——一个简单的Linux select socket客户端;
  6. CountDownLatch——使用std::mutex和std::condition_variable实现的简单倒计时门闩(std::latch c++20);
  7. Crashpad——google crashpad的简单封装;
  8. Curl——curl的简单使用;
  9. TcpClient——使用curl实现的简单tcp客户端;
  10. HttpClient——使用curl实现的简单http同步客户端;
  11. HttpClientAsync——使用curl实现的简单http异步客户端;
  12. DesignPattern——设计模式的一些例子;
  13. Factory——工厂模式;
  14. MVC——mvc模式;
  15. Observer——观察者模式;
  16. Singleton——单例模式;
  17. GlobMatch——glob模式匹配的简单实现;
  18. Glog——google glog的例子;
  19. Icmp——linux icmp协议的简单封装;
  20. LinkedList——链表的相关操作,插入、移除、反转、打印;
  21. Memcpy——memcpy函数实现;
  22. MonitorDir——windows(ReadDirectoryChangesW),macos(FSEvents)和linux(fanotifyinotify)目录监控的简单例子;
    1. fanotify中使用global模式,在fanotify_mark中加入FAN_MARK_FILESYSTEM(需要CAP_SYS_ADMIN能力,即root权限)这个flag,可以所有在指定文件系统上的事件都会被监控,然后可以根据指定的监控的文件夹目录过滤需要的事件,这个功能比inotify更强大;
      1. 获取事件发生文件所在的上级路径中,使用了open_by_handle_at这个方法,普通用户下会出现Operation not permitted错误,也需要CAP_SYS_ADMIN能力,即root权限;
      2. 建议使用root权限运行,如果一定要在普通用户下运行,还是建议使用inotify而不是fanotify,反正在打开一个监控文件描述符(fd)的情况下,都无法实现subtree监控;
  23. MonitorDir_EFSW——使用efsw实现的目录监控的简单例子;
  24. Mutex——使用std::atomic_flag实现的简单互斥锁和自旋锁;
  25. OpenSSL——openssl的一些例子;
    1. aes——aes加解密的例子;
    2. base64——base64编解码的例子;
    3. hash——sha256的例子;
    4. hmac——hmac的例子;
    5. pem——pem格式的例子;
    6. rsa——rsa加解密的例子;
    7. sm4——sm4加解密的例子;
    8. x509——x509证书的例子;
    9. bash——openssl命令行的例子;
  26. Server——linux server的一些例子;
    1. server_epoll——epoll的例子;
    2. server_poll——poll的例子;
    3. server_select——select的例子;
  27. Thread——基于std::thread实现的线程类,包括线程池;
    1. Thread——线程类;
    2. ThreadPool——线程池;