摘要: std::forward 完美转发 1. std::forward代码原型: template <class T> T&& forward(typename remove_reference<T>::type& t) noexcept { return static_cast<T&&>(t); } 阅读全文
posted @ 2020-09-06 20:48 苏格拉底的落泪 阅读(612) 评论(0) 推荐(0)
摘要: yum源 $basearch 是一个占位符,用于代表系统的基本架构(Base Architecture),通常在 YUM/DNF 仓库配置文件或 GPG 密钥路径中使用。它的值由你的系统架构决定。以下是一些常见的 $basearch 对应值: x86_64:对于 64 位的 x86 系统(如大多数现 阅读全文
posted @ 2020-04-20 11:06 苏格拉底的落泪 阅读(176) 评论(0) 推荐(0)
摘要: 参考资料 1. Linux 查看某一个进程占用内存情况 阅读全文
posted @ 2019-06-26 19:11 苏格拉底的落泪 阅读(177) 评论(0) 推荐(0)
摘要: std::move std::move函数原型: template <typename T> typename remove_reference<T>::type&& move(T&& t) { return static_cast<typename remove_reference<T>::typ 阅读全文
posted @ 2019-05-11 14:07 苏格拉底的落泪 阅读(242) 评论(0) 推荐(0)
摘要: #include <pthread.h> #include <stdio.h> #include <unistd.h> void *func(void *data) { while (1) { printf("Speaking from the detached thread...\n"); sle 阅读全文
posted @ 2019-05-10 15:24 苏格拉底的落泪 阅读(136) 评论(0) 推荐(0)
摘要: 内存分配方式 一、分配方式简介 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆:就 阅读全文
posted @ 2019-05-08 21:26 苏格拉底的落泪 阅读(366) 评论(0) 推荐(0)
摘要: sshpass命令使用 直接远程连接某主机 sshpass -p {密码} ssh {用户名}@{主机IP} 远程连接指定ssh的端口 sshpass -p {密码} ssh -p ${端口} {用户名}@{主机IP} 从密码文件读取文件内容作为密码去远程连接主机 sshpass -f ${密码文本 阅读全文
posted @ 2019-04-24 15:08 苏格拉底的落泪 阅读(263) 评论(0) 推荐(0)
摘要: gflags库 gflags库地址:https://github.com/gflags/gflags DEFINE_bool 是 Google 提供的 gflags 命令行参数解析库中的一个宏,用于 定义布尔类型的命令行标志flag 用法: DEFINE_bool(flag_name, defaul 阅读全文
posted @ 2019-04-18 21:38 苏格拉底的落泪 阅读(125) 评论(0) 推荐(0)
摘要: find_package 参考资料 1. cmake之深入理解find_package()的用法 阅读全文
posted @ 2019-04-18 21:37 苏格拉底的落泪 阅读(136) 评论(0) 推荐(0)
摘要: Part II:vmware虚拟机安装centos7操作系统教程 参考资料 阅读全文
posted @ 2019-04-04 13:33 苏格拉底的落泪 阅读(186) 评论(0) 推荐(0)
摘要: cifs客户端回写 const struct address_space_operations cifs_addr_ops = { .readpage = cifs_readpage, .readpages = cifs_readpages, .writepage = cifs_writepage, 阅读全文
posted @ 2019-03-29 15:17 苏格拉底的落泪 阅读(134) 评论(0) 推荐(0)
摘要: 编写和加载 .ko 文 说明: 参考资料 1. Linux下编写和加载 .ko 文件(驱动模块文件) 阅读全文
posted @ 2019-03-29 11:38 苏格拉底的落泪 阅读(144) 评论(0) 推荐(0)
摘要: docker镜像迁移 1.将docker镜像导出为静态文件 :jeecg-boot:lastest为镜像名,lastest:镜像版本号, jeecg-boot.tar为新生成的静态文件名 docker save jeecg-boot:lastest > jeecg-boot.tar 2. 通过将sc 阅读全文
posted @ 2019-03-28 16:34 苏格拉底的落泪 阅读(237) 评论(0) 推荐(0)
摘要: C++ 编译器优化之 RVO 与 NRVO RVO 即 “Return Value Optimization”,是一种编译器优化技术,通过该技术编译器可以减少函数返回时生成临时值值(对象)的个数,从某种程度上可以提高程序的运行效率,对需要分配大量内存的类对象其值复制过程十分友好。NRVO 全称为 “ 阅读全文
posted @ 2019-03-27 19:03 苏格拉底的落泪 阅读(476) 评论(0) 推荐(0)
摘要: centos7 删除内核 对于小硬盘的VPS,如果使用了CentOS,那内核的几百兆空间还是很有必要清理删除掉的。如何安全的删除CentOS 中的不需要的内核呢?列出内核: rpm -qa |grep kernel-[0-9] 移除不需要的内核: yum remove kernel-3.10.0-8 阅读全文
posted @ 2019-03-27 16:00 苏格拉底的落泪 阅读(212) 评论(0) 推荐(0)
摘要: 线程创建 1.1 通过普通函数创建线程 1. 示例 #include <iostream> #include <thread> using namespace std; void func(int a, double b) { cout << a << ' ' << b << endl; } voi 阅读全文
posted @ 2019-03-27 15:00 苏格拉底的落泪 阅读(139) 评论(0) 推荐(0)
摘要: 二、相同的树 题目:100. Same Tree C++ Soution 1: 三、爬楼梯 题目:70. Climbing Stairs 分析: C++ Soution 1: 四、反转字符串 题目:344. Reverse String C++ Soution 1: 阅读全文
posted @ 2019-03-27 10:53 苏格拉底的落泪 阅读(212) 评论(0) 推荐(0)
摘要: 快速排序 快速排序的思想是这样的,如果要对数组区间 [p, r] 的数据进行排序,我们先选择其中任意一个数据作为 pivot(分支点),一般为区间最后一个元素。然后遍历数组,将小于 pivot 的数据放到左边,将大于 pivot 的数据放到右边。接着,我们再递归对左右两边的数据进行排序,直到区间缩小 阅读全文
posted @ 2019-03-27 10:02 苏格拉底的落泪 阅读(219) 评论(0) 推荐(0)
摘要: rpm打包时包含python脚本,需要忽略掉pyc, pyo字节码文件 制作rpm包时,有时包含python程序,一般默认的行为:打包时对python脚本会编译成pyc,pyo字节码文件并一起放在rpm包中,这可能导致打包时引用文件缺失的错误。 如果不需要这些字节码文件,可以修改/usr/lib/r 阅读全文
posted @ 2019-03-23 21:29 苏格拉底的落泪 阅读(141) 评论(0) 推荐(0)
摘要: bind用法(10) 占位符 表示 _1 调用时的第1个参数 _2 调用时的第2个参数 _3 第3个参数 ... ... #include <iostream> #include <functional> void print(int a, int b) { std::cout << a << " 阅读全文
posted @ 2019-03-20 20:44 苏格拉底的落泪 阅读(558) 评论(0) 推荐(0)
摘要: 在multimap或multiset中查找元素 第二种方法解释: 1 #include <iostream> 2 #include <utility> 3 #include <iterator> 4 #include <functional> 5 #include <algorithm> 6 #in 阅读全文
posted @ 2019-03-13 17:10 苏格拉底的落泪 阅读(163) 评论(0) 推荐(0)
摘要: 继承的构造函数 子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递。如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数。 struct Base { Base(int x) { std::cout << "Base(" << 阅读全文
posted @ 2019-03-13 14:40 苏格拉底的落泪 阅读(773) 评论(0) 推荐(0)
摘要: protected 和 private修饰的构造函数:连接 1. 在类的外部创建对象时,不能调用protected或private修饰的构造函数。 2.当子类中的构造函数调用父类的private构造函数时会错,当子类中的构造函数调用父类中的 public或protected构造函数时是对的 1 #i 阅读全文
posted @ 2019-03-12 17:18 苏格拉底的落泪 阅读(382) 评论(0) 推荐(0)
摘要: linux内核定时器 代码位置:kernel/time/timer.c 函数原型: int mod_timer(struct timer_list *timer, unsigned long expires); 功能:修改已有定时器的到期时间。如果定时器已经在运行,它会重新设置到期时间;如果定时器未 阅读全文
posted @ 2019-02-20 16:04 苏格拉底的落泪 阅读(384) 评论(0) 推荐(0)
摘要: epoll概念 epoll对文件描述符的操作方式有两种工作模式:LT模式(Level Trigger,水平触发) 和ET模式(Edge Trigger,边缘触发)。 LT模式:当epoll_wait检测到其上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件,这样,当应用程序下一次调用 阅读全文
posted @ 2019-01-25 16:55 苏格拉底的落泪 阅读(305) 评论(0) 推荐(1)
摘要: poll函数 函数原型: struct ibv_context *ibv_open_device(struct ibv_device *device); 功能 打开指定的 InfiniBand 设备 返回设备上下文 (context),用于后续所有操作 这是使用 InfiniBand 设备的第一步 阅读全文
posted @ 2019-01-23 22:10 苏格拉底的落泪 阅读(565) 评论(0) 推荐(0)
摘要: 实验一 代码:链接【01项目】 1. 先启动服务器,如图: 2. 然后启动客户端,如图: 3. 输出结果: 【注意】:在服务器终止时,给父进程发送了一个SIGCHILD信号,这一点本例发生了,但是我们没有在代码中捕捉该信号,而默认该信号时被忽略,既然父进程未加处理,子进程于是进入僵尸状态。 如图: 阅读全文
posted @ 2019-01-23 18:40 苏格拉底的落泪 阅读(164) 评论(0) 推荐(0)
摘要: 文件IO #include<unistd.h> ssize_t read(int fd, void *buf, size_t count); read返回值: 1. = 0:数据读完(读到文件、管道、socket末尾-对端关闭) 2. -1: errno == EINTR:被信号中断 errno = 阅读全文
posted @ 2019-01-23 13:50 苏格拉底的落泪 阅读(115) 评论(0) 推荐(0)
摘要: 进程程序替换 进程程序替换原理 fork创建子进程执行的是和父进程相同的程序(也有可能是某个分支),通常fork出的子进程是为了完成父进程所分配的任务,所以子进程通常会调用一种exec函数(六种中的任何一种)来执行另一个任务。当进程调用exec函数时,当前用户空间的代码和数据会被新程序所替换,该进程 阅读全文
posted @ 2019-01-14 21:37 苏格拉底的落泪 阅读(263) 评论(0) 推荐(0)
摘要: 函数sigsuspend sigqueue函数原型: 函数作用:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用 int sigqueue(pid_t pid, int signo, const union sigval value); 分析: 第 阅读全文
posted @ 2019-01-14 20:37 苏格拉底的落泪 阅读(434) 评论(0) 推荐(0)
摘要: 函数函数sigaction 1. 函数sigaction原型: int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 分析: 参数 signum :要捕获的信号。 参数act:truct s 阅读全文
posted @ 2019-01-14 10:47 苏格拉底的落泪 阅读(2992) 评论(0) 推荐(0)
摘要: 网络IPC:套接字 strcut sockaddr 很多网络编程函数诞生早于IPv4协议,那时候都使用的是sockaddr结构体,为了向前兼容,现在sockaddr退化成了(void *)的作用,传递一个地址给函数,至于这个函数是sockaddr_in还是sockaddr_in6,由地址族确定,然后 阅读全文
posted @ 2019-01-13 21:58 苏格拉底的落泪 阅读(407) 评论(0) 推荐(0)
摘要: 函数select 函数原型: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); void FD_CLR(int fd, fd_set *set); 阅读全文
posted @ 2019-01-13 21:17 苏格拉底的落泪 阅读(197) 评论(0) 推荐(0)
摘要: 函数epoll 1. 函数epoll_creat: 该函数生成一个epoll专用的文件描述符: int epoll_creae(int size); 参数: size:epoll上能关注的最大描述符数 2. epoll_ctl:用于控制某个epoll文件描述符事件,可以注册、修改、删除: int e 阅读全文
posted @ 2019-01-13 19:55 苏格拉底的落泪 阅读(428) 评论(0) 推荐(0)
摘要: 使用lambda创建线程 1. 例子: #include <iostream> #include <thread> #include <chrono> #include <vector> #include <mutex> #include <memory> class Task { public: 阅读全文
posted @ 2019-01-13 19:51 苏格拉底的落泪 阅读(665) 评论(0) 推荐(0)
摘要: 函数wait 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个,这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除这个进程,我们知道 阅读全文
posted @ 2019-01-13 19:08 苏格拉底的落泪 阅读(424) 评论(0) 推荐(0)
摘要: 会话 会话:是一个或多个进程组的集合。 创建一个会话需要注意以下6点注意事项: 调用进程不能是进程组组长,该进程变成新会话首进程(session header) 该进程成为一个新进程组的组长进程。 需要root权限(ubuntu不需要) 新会话丢弃原有的终端控制,该会话没有控制终端 该调用进程是组长 阅读全文
posted @ 2019-01-13 18:39 苏格拉底的落泪 阅读(198) 评论(0) 推荐(0)
摘要: 进程组 (1)进程组,也称之为作业,BSD与1980年前后向UNIX中增加的一个新特性,代表一个或多个进程的集合。每个进程都属于一个进程组,在waitpid函数和kill函数的参数中都曾经使用到,操作系统设计的进程组的概念,是为了简化对多个进程的管理。 当父进程创建子进程的时候,默认子进程与父进程属 阅读全文
posted @ 2019-01-13 18:17 苏格拉底的落泪 阅读(394) 评论(0) 推荐(0)
摘要: signal函数 1. signal函数原型: #include <signal.h> void (*signal(int signo, void (*func)(int)))(int); 函数功能:为指定的信号安装一个新的信号处理函数。 图解; #include <stdio.h> #includ 阅读全文
posted @ 2019-01-13 18:08 苏格拉底的落泪 阅读(306) 评论(0) 推荐(0)
摘要: 信号集、sigprocmask、sigpending 信号源为目标进程产生了一个信号,然后由内核来决定是否要将该信号传递给目标进程。从信号产生到传递给目标进程的流程图如下图所示: 进程可以阻塞信号的传递。当信号源为目标进程产生了一个信号之后,内核会执行依次执行下面操作, 1. 如果目标进程设置了忽略 阅读全文
posted @ 2019-01-11 21:22 苏格拉底的落泪 阅读(338) 评论(0) 推荐(0)