自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(152)
  • 资源 (2)
  • 收藏
  • 关注

原创 8. Linux/Unix进程控制

8.1 引言  包括创建新进程,执行程序和终止。还将介绍进程属性中的各种ID——实际、有效和保存的用户ID和组ID.8.2 进程标识/进程ID#include <unistd.h>pid_t getpid(void);//获取进程IDpid_t getppid(void);//获取父进程IDpid_t getuid(void);//获取进程的实际用户IDpid_t geteuid(void);//获取进程的有效用户IDpid_t getgid(void);//获取进程的组ID

2021-10-29 22:00:42 321

原创 5. 标准I/O库

5.1 引言  第三章中的I/O函数都是围绕文件描述符,而标准I/O库是针对流(stream)进行的,当使用标准I/Ok库打开或创建一个文件时,我们以使一个流与一个文件关联。  当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针。该对象通常是一个结构体,包含了用于实际IO的文件描述符、指向用于流缓冲区的指针、缓冲区的长度、当前在缓冲区的字符数以及出错标志等。  为了引用一个流,需将FILE指针作为参数传递给每个标准IO函数。5.2...

2021-10-22 20:23:43 134

原创 用C++简单写的线程池

测试用例在后面:参考地址Thread.h/*Datetime:2020/8/21By LiuZhenguang*/#ifndef _THREADPOOL__H#define _THREADPOOL__H#include <vector>#include <iostream>#include <mutex>#include <thread>#include <deque>#include <condition_v

2020-09-04 15:25:25 166

原创 #pragma和ifndef的区别

首先#pragma once是编译器相关的,有的编译器支持,有的编译器不支持1、#ifndef的方式依赖于宏名字不能冲突,所以这可以保证同一个文件不会被包含多次,也能保证多份拷贝的文件不会被同时包含;缺点就是如果不同内容头文件的宏名不小心“撞车”,编译器则只能包含其中一个;2、#pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件;缺点就是,某个头文件有多份拷贝,本方法不能保证他们不被重复包含。3、综上,#ifndef 保证宏名不重复

2020-08-25 21:50:49 354

原创 设计模式15——代理模式(Proxy)

一、动机在面向对象系统中,有些对象由于某种原因(比如创建对象的开销很大),直接访问会给使用者、或者系统结构带来很多麻烦。如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。二、模式定义为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。——《设计模式》GoF三、案例有一个处理函数的基类,process声明为虚函数,然后RealSubject继承基类,并重写虚函数:class ISubject{public: virt

2020-08-11 09:59:49 150

原创 Winndows\C++并发与多线程

并发与多线程一、并发、进程、线程的基本概念1、并发:​ 两个或者更多独立的任务同时发生:一个程序同时执行多个独立的任务;​ 以往的计算机是假的并发,采用的是时分复用;这种切换是需要时间开销的​ 硬件的发展出现了多处理器计算机,能够真正的并行执行多个任务。2、进程​ 进程就是一个可执行程序运行起来3、线程​ 每个进程都有一个主线程,一个进程只有一个主线程,当你执行可执行程序,这个主线程就默默启动,实际上是进程中的主线程来执行main函数中的代码。​ 每创建其他线程,就可以在同一个时刻

2020-08-05 11:15:17 1129

原创 设计模式1——模板方法(template method)

在软件构建过程中,对于某一项项目,他常常有稳定的整体结构,(即程序的整体框架是固定的,但是各个函数的实现细节可能会变化或者多个细节的版本)。或者由于固有的原因而无法和任务的整体结构同时实现。那么问题就来了,如何应对这种多个版本的子函数呢?在传统的结构化软件设计流程如下://程序库开发人员class Library{public: void Step1(){ //... } void Step3(){ //... } void Step5(){ //... }};/

2020-08-05 10:47:28 276

原创 标准粒子群C语言程序

//库文件 #include"stdio.h" #include"stdlib.h" #include"time.h" #include"math.h" //随机数定义 #define rdint(i) (rand()%(int)(i)) #define rdft()(float)((double)rdint(16384)/(16383.0)) #define rnd(a,b)(rdint((int)(b)-(int)(a)+1)+(int)(a)) //宏定义 #def.

2020-08-03 11:04:43 303

原创 IO多路复用

IO多路复用(IO Multiplexing)一种同步IO模型,单个进程/线程可以同时处理多个IO请求。一个进程/线程可以监视多个文件描述符;一旦某个文件描述符就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个进程/线程。

2024-10-23 21:41:23 698

原创 Socket通信基础

下面先详细介绍一下各个接口的使用方法。

2024-10-23 09:27:43 547

原创 进程通信——管道

管道是Linux中进程间通信的一种方式,他把一个程序的输出直接连接到另一个程序的输入。匿名管道和命名管道。管道不属于进程的资源,而是和套接字一样,属于操作系统(也就不是fork函数的复制对象)。所以,两个进程通过操作系统提供的内存空间进行通信。无名管道是Linux中管道通信的一种原始方法,如下图所示,它具有如下特点:(1)它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。(2)它是一个单工的通信模式,具有固定的读端和写端,一边只能读,一边只能写。

2024-10-16 20:49:57 1044

原创 进程通信——消息队列

消息队列称为报文队列也叫做信箱,是linux的一种通信机制这种通信机制传递的数据具有某种结构,而不是简单的字节流。消息队列的本质是内核提供的链表,内核基于这个链表,实现了一个数据结构。内核又基于此提供了从一个进程向另一个进程发送一块数据的方法向消息队列写数据,实际上是向这个数据结构中插入一个新节点;从消息队列读数据,实际上是从这个数据结构中删除一个节点。消息队列也有管道一样的不足,就是每个数据块的最大长度是有限的,系统上全体队列的最大值也有一个上限。

2024-09-01 16:19:39 1026

原创 进程间通信——互斥

多个进程同步访问同一个资源和多个线程同步访问同一个资源相同,也会存在资源抢占的情况。所以需要进行资源加锁。

2024-08-31 22:38:19 313

原创 进程通信——共享内存

不同进程的资源通常是独立的,他们所占用的内存互相独立,不可互相访问。而共享内存允许多个进程访问同一块内存区域,从而实现数据的共享和交换。是一种高效的进程通信方法。在共享内存中,多个进程可以将同一块物理内存,映射到它们各自的虚拟地址中,使它们可以直接读写该内存的内容,而无需通过消息传递等其它通信方式,也就是“完全无需额外的拷贝这种直接的内存访问,使得数据交换更高效。

2024-08-31 16:38:10 1197

原创 C/C++信号量

信号量是一种特殊的变量,是操作系统层面的,可以被增加或减少。信号量用于保护一段资源,使其每次只能被有限的线程访问到。

2024-08-19 19:58:43 720

原创 C++线程互斥加锁总结

更新中本文将多线程中的一些加锁部分抽取出来深入学习,C++11部分有了一些崭新的库,C++17又支持了共享互斥锁。而C++98更偏向于C语言的方式,所以将C和C++区分开展示案例。

2024-08-10 16:18:55 852

原创 字符串hash算法

【代码】字符串hash算法。

2024-08-02 09:27:19 433

原创 1. protobuf学习

ProtoBuf是中立于编程语言和编程平台的,可扩展的用于序列化结构化数据的解决方案,是Google公司开发的一种数据描述语言,可用于数据存储、通信协议等方面。定义完你所需要的数据结构后,你可以基于protoBuf生成各种语言的代码,这些定义的数据流可以轻松地被传递且不会破坏你已有的程序。并且你也可以更新你的结构体而现有的代码也不会收到任何影响。protoBuf目前支持Objective-C、C++、C#、Jave、Python、Go、PHP、JavaScript等主流语言。

2024-08-01 16:14:08 747

转载 C++智能指针

unique_ptr:内存的所有者必须是唯一的。如果进入不同的模块或者调用者,那么执行所有权转移。shared_ptr: 内存由多个指针变量共同使用,共同拥有内存的所有权。但是必须杜绝循环拷贝.weak_ptr: 对内存的使用仅仅是访问而已,不涉及其生命周期的管理。

2024-07-06 17:57:50 47

原创 5 外部样式表

【代码】5 外部样式表。

2024-07-06 15:39:30 192

原创 4按钮和label标签

【代码】4按钮和label标签。

2024-07-06 15:37:23 211

原创 03 表单

11

2024-07-06 15:35:49 118

原创 Cmake入门

div.c;mult.c;main.c)

2024-04-05 13:45:27 892

原创 C++ decltype类型

当使用decltype(var)的形式时,decltype会直接返回变量的类型(包括顶层const和引用)随着程序越来越复杂,程序中用到的类型也越来越多,我们有时候不得不去翻阅大量上下文去寻找此。会返回对应的函数类型,不会自动转换成相应的函数指针,需要添加一个。并不会实际计算表达式的值,编译器分析表达式并得到它的类型。就是一种类型说明符,它的出现主要是解决复杂的类型声明。

2023-09-28 16:19:09 305

原创 数组指针和指针数组

]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]…()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2]p表示指针数组第一个元素的值,a的首地址的值。

2023-08-06 15:49:09 249

原创 __attribute__ ((packed))

【代码】__attribute__ ((packed))

2023-05-24 22:36:47 363

原创 弱符号__attribute__((weak))

这个不太好解释,C的代码中出现同名的函数时,编译器会报函数重定义错误。弱符号的出现允许同名函数存在,弱符号告知链接器该函数或变量优先级较低,优先链接其他同名函数。

2023-05-24 22:24:14 989

原创 1、使用read和write实现文件拷贝

【代码】1、使用read和write实现文件拷贝。

2023-02-26 23:40:58 358

转载 9、logging模块[python]

利用python的logging模块可以很简单的记录程序运行中的各种日志,尽管自己写一个函数,将程序运行日志写到文件并不是很难,但已经有了logging模块,这大可不必自己动手。日志一共分为5个级别说明DEBUG输出详细的运行情况,主要用于调试INFO确认一切按预期运行,一般用于输出重要运行情况WARNING一些意想不到的事情发生了(比如:“警告:内存空间不足”),但是这个软件还能按期工作,在不久的将来会出现问题ERROR发生了错误,软件没能执行一些功能,还可以继续执行CRITICAL。

2023-02-26 16:08:01 371

原创 base64和base64url编解码

一个字节可以表示256种数值,但是由于一些字节在网络中有特殊的含义。所以当传输字节内容时就不能传输这些具有控制功能的字符。具体的做法就是将这些字符进行转码。ASCII中是可打印字符,所以可以将要传输的字符转码为这个范围内的字符。base64编码就是将255种字节转换为64种进行传输;base64url编码也是将255种字节转换为64种进行传输,与base64选择的字符稍有不同.

2023-01-07 16:58:03 1361

原创 Linux查找命令

【代码】Linux查找命令。

2023-01-04 23:16:49 164

原创 C和C++中的bitset

C/C++中没有bool类型,使用整形值表示bool类型占内存较多。C++中推出了bitset类库来,可以使用一个bit位来表示一个数据的bool类型,本文将有所介绍。另外在C语言中借助字符数组或整形值数组,同样可自己表示出bitset的机制。//声明一个长度为4bit的 bitset,默认每一位为 0. bitset < 8 > b(12);

2022-10-29 16:29:37 1648 2

原创 Docker入门

本文主要将介绍Docker入门介绍,包括Docker引入,安装为什么引入docker开发和运维通常是分离的,开发把代码可执行文件交给运维。这就会产生一个最常见的问题:这个代码在我这是可以运行的,怎么到你那就不行了呢?这通常是因为软件版本、依赖包版本、配置文件等一系列因素导致的,那么如何去解决这个问题呢?这就要引入Docker,Docker对此问题提供了一种标准化的解决方案——系统平滑移植,容器虚拟化部署。也就是说软件带环境安装,安装的时候把既定的环境一起带过来,形成一个镜像。

2022-10-03 17:49:08 3020

原创 std::bind用法

C++11中的bind()函数是用来提供可调用函数对象和函数调用的参数绑定关系的。其可以支持普通函数、函数对象和成员函数的绑定,而且支持占位。

2022-10-03 14:45:25 1594

原创 10. shell_awk用法

在计算内存使用率时,使用free -m会输出一堆流,需要使用等命令去进行复杂的内容解析,最后再去计算使用率。但使用awk就会自动解析内容,每行一条记录,每列一个属性。行与行之间以回车符进行解析,列之间默认以空格或者回车分割去解析。

2022-09-20 23:58:26 331

原创 9. shell对文件的操作

vim是文本编辑器,必须进行交互式的编辑文件。sed是行编辑器,可以进行无交互的编辑文件。

2022-09-19 22:12:23 307

原创 8. shell正则表达式

shell中只有·grep sed awk·支持正则表达式。第一个中括号:是匹配符,匹配中括号中的任一个字符。shell并不是左右命令都支持正则表达式.第二个中括号:是格式,POSIX特殊字符。

2022-09-12 15:27:46 245

原创 7. nginx启动管理实践

【代码】7. nginx启动管理实践。

2022-09-12 14:34:57 649

原创 6. shell函数

shell函数

2022-09-12 13:52:44 122

原创 0. shell特殊变量

shell。

2022-09-12 12:16:36 139

DSpelChk.dll

DSpellCheck自动拼写检查。 将文件放到notepad安装目录的plugins下即可,然后重启后点击插件即可设置

2021-07-09

第4阶段实战-基于多态的企业职工系统.rar

一个C++的控制台程序,企业职工管理系统,显示,添加职工,修改,删除。里面项目代码,讲义讲解,成品程序都有,很久之前的,分享一下吧。

2020-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除