摘要: 进程间通信概述 1. 什么是进程间通信? 什么是线程间通信? 进程间通信: 在用户空间实现进程间通信是不可能的,进程间通信通过Linux内核对象来实现。 线程间通信:这在用户空间就可以实现,甚至可以通过全局变量来通信。 2. 有哪几种进程间通信方式? ** 管道通信:无名管道、有名管道(文件系统中有 阅读全文
posted @ 2020-10-12 21:56 一匹夫 阅读(86) 评论(0) 推荐(0) 编辑
摘要: I/O处理五种模型 *** 阻塞I/O模型 *** 非阻塞I/O模型 *** I/O多路转接模型 *** 信号驱动I/O模型 当数据报准备好的时候,内核会向应用程序发送一个信号,进程对信号进行捕捉,并且调用信号处理函数来获取数据报。 该模型分为两个阶段: 1.数据准备阶段:未阻塞,当数据准备完成之后 阅读全文
posted @ 2020-10-11 21:20 一匹夫 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 原型: #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ ); 功能: 改变已经打开文件的性质 常见使用方式: int fcntl(int fd, int cmd); int fcntl(i 阅读全文
posted @ 2020-10-10 05:52 一匹夫 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 我的相关博文: 系统编程-进程-exec系列函数超级详解(带各种实操代码) 一般我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈等。 此时保存文件描述符的变量当然也不存在了,我们就无法关闭无用的文件描述符了。 所以通常的做法是,我们一般会fork子进程后,先在子进程 阅读全文
posted @ 2020-10-05 23:35 一匹夫 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 在linux下,一切皆文件。 文件描述符用于操作文件。 从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2);)0表示标准输入,1表示标准输出,2表示标准错误。 一个进程当前有哪些打开的文件描述符可以通过/proc/进程ID/fd目录查看。 1、 dup函数 #include <un 阅读全文
posted @ 2020-10-05 21:57 一匹夫 阅读(159) 评论(0) 推荐(0) 编辑
摘要: # 进程结束后,进程的所有内存都将被释放,包括堆上的内存等泄露的内存。 原因是,当进程结束时,GDT、LDT和页目录都被操作系统更改,逻辑内存全部消失, 可能物理内存的内容还在, 但是逻辑内存已经从LDT和GDT删除,页目录表全部销毁,所以内存会被全部收回。 # # # # # # # # # # 阅读全文
posted @ 2020-10-04 18:35 一匹夫 阅读(88) 评论(0) 推荐(0) 编辑
摘要: # 行缓存会输出的时机: 行缓存满,程序结束,遇到fflush刷新,遇到换行符。 磁盘通常是全缓存。 标准错误一般是无缓存,希望尽快被输出到终端上。系统调用api不带缓冲,C库函数api带缓冲。 # 调用read系统调用读取大量磁盘数据时: 先通过df命令查看磁盘文件系统(一般是/dev/sda1) 阅读全文
posted @ 2020-10-04 18:31 一匹夫 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 1. 下面张贴实现该队列仅需的两个头文件:ring_buffer_iterator.h 和 fifo_iterator.h ring_buffer_iterator.h 1 /* 2 * 3 * This program is free software; you can redistribute 阅读全文
posted @ 2020-10-04 17:37 一匹夫 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 列一个我在工作上写的代码片段, 下面是消费者端的代码 static void input_status_report_thread(struct local_pthread_wrapper* thread, void* param) { struct input_manager *input = N 阅读全文
posted @ 2020-10-03 23:40 一匹夫 阅读(159) 评论(0) 推荐(0) 编辑
摘要: # i2c_add_driver和i2c_new_device匹配后调用i2c_probe i2c控制器被注册为Platform设备。 # 启动开发板,在超级终端中输入命令“cat /proc/misc”也可以查看对应的杂项设备。 前面介绍过主设备号只有 256 个,而设备又非常多,所以引入了子设备 阅读全文
posted @ 2020-10-03 22:56 一匹夫 阅读(161) 评论(0) 推荐(0) 编辑
摘要: . class Myclass { public: virtual int FuncX(); virtual int FuncY(); }; int main() { Myclass obj; // 编译报错 cout << "hello" << endl; return 0; } class My 阅读全文
posted @ 2020-10-03 22:33 一匹夫 阅读(155) 评论(0) 推荐(0) 编辑
摘要: const int f[10] = { 1,2,3,4,5,6,7,8,9,10 }; int main() { // test1 const int i = 3; int& j = const_cast<int&>(i); // 使用const_cast关键字进行强制类型转换 j = 5; // 阅读全文
posted @ 2020-10-03 21:22 一匹夫 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 1. 多态初体验 #include <iostream> #include <string> using namespace std; class Parent { public: virtual void print() { cout << "I'm Parent." << endl; } }; 阅读全文
posted @ 2020-10-03 20:43 一匹夫 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 1. 重载指针访问符 初体验 #include <iostream> using namespace std; class test { public: test(int input) :num(input), j(input) {} ~test() {} int operator * () con 阅读全文
posted @ 2020-10-03 17:42 一匹夫 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 字面常量不可以有引用,因为这也不需要使用符号来引用了,但是字面常量却可以初始化const引用,这将生成一个只读变量; 对变量的const修饰的引用是只读属性的; 也就是说,const修饰的引用,不管是变量初始化还是字面常量初始化,总是对应一个只读变量。 # 函数能够重载和返回值无关,所以两个函数若是 阅读全文
posted @ 2020-10-02 23:05 一匹夫 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 1. 引入。 先上代码 1 // 本事件通信类应该支持一个事件的上半部、下半部方法的注册,以及cancel_event方法的注册。(或者不采用注册,而借助信号与槽) 2 // 外界可以通过本类对外提供的wake_event接口触发本类的do_event方法的执行。 3 // do_event方法内部 阅读全文
posted @ 2020-09-27 16:49 一匹夫 阅读(148) 评论(0) 推荐(0) 编辑
摘要: gettid()这个函数不可以在程序中直接使用,它是Linux本身的一个函数, 但是:仅包含#include <sys/types.h>,然后使用,编译时会报该函数未定义之类的错误! 解决方案: 我们可以自已定义实现方法,如下: #include <sys/syscall.h> /*添加上此头文件* 阅读全文
posted @ 2020-09-27 15:05 一匹夫 阅读(472) 评论(0) 推荐(0) 编辑
摘要: ques1: 数组名完全等价于指针常量吗? int array[10] = { 10,11,12,13,14,15 }; printf("sizeof(array)= %d \n", sizeof(array)); char* const str_2 = "QQQQQQQQQQQQQQ"; prin 阅读全文
posted @ 2020-09-25 11:39 一匹夫 阅读(92) 评论(0) 推荐(0) 编辑
摘要: #if 1 #include <stdio.h> void base_demo1() { int *pTest = 0; printf("pTest = 0x%p \n", pTest); pTest++; printf("pTest = 0x%p \n", pTest); printf("size 阅读全文
posted @ 2020-09-25 00:51 一匹夫 阅读(157) 评论(0) 推荐(0) 编辑
摘要: test1: 展示了, 1 信号与槽的基本使用, 2 要获取槽函数的返回值时的注意事项 #if 1 /* 参考blog https://www.cnblogs.com/jiayayao/p/6246161.html Qt异步的实现实际上是将信号push到一个队列中,然后由统一的线程来处理信号对应的槽 阅读全文
posted @ 2020-09-24 21:54 一匹夫 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 单例模式的构造函数是私有的,目的是让用户无法直接new出实例,而只有通过其他的接口来获取实例,单例模式在这里作文章,使得多次获取到的实例,都是同一个实例。 单例模式,分为饿汉式单例 和 懒汉式单例。 先把本类对象所需内存在main函数执行前就new出来,这是饿汉式单例。 个人思考: 为什么饿汉式不独 阅读全文
posted @ 2020-09-14 09:44 一匹夫 阅读(512) 评论(0) 推荐(0) 编辑
摘要: 设计背景: 我:头上的油揩给了手,手接触洗手液。洗手液伤头皮,这样头皮就不会和洗手液接触了。 具体执行过程描述: 1.手揩油 -> 2.取液体 3.->洗手 我:这是什么设计模式?怎么实现? 广告兄<同城广告网>: 设计模式的核心就是面向抽象编程,你首先让手成为一个抽象的类,而不只是手,是一个可以把 阅读全文
posted @ 2020-09-13 17:19 一匹夫 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 小结如下: 前置声明注意事项: 类或结构体的前置声明, 在其内部只能定义对象指针,因为此时没有办法构造一个具体的对象。 . 阅读全文
posted @ 2020-09-10 17:03 一匹夫 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 我的相关博文: 别只知道策略模式+简单工厂,试试更香的策略模式+抽象工厂! 1. 简单工厂模式, 一图就看尽 涉及: 产品抽象类(即水果类) 、 工厂类、具体产品类(香蕉类、苹果类) 2. 工厂方法模式使用先来看一下,上截图: 工厂方法模式的实现: 3 class SingleCore // 抽象类 阅读全文
posted @ 2020-09-09 22:26 一匹夫 阅读(688) 评论(0) 推荐(0) 编辑
摘要: 1. 标题: 公厕有感现在的公厕蹲坑应该设计成: 蹲下来小水慢冲,站起来大水狂冲。ques: 好奇你经历过什么? 设计需求: 蹲坑的缺陷在于,臭味重,时间久。 设计背景:从你蹲下来的首次排便起,到底站起来离开。如果旁边有人进入公厕撒尿,其危害程度相当于在别人鼻子边放了一百个臭屁。 设计方法:现在的公 阅读全文
posted @ 2020-09-09 14:34 一匹夫 阅读(102) 评论(0) 推荐(0) 编辑