C/C++/C#
文章平均质量分 68
C语言系列衍生
HideInTime
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C#的web服务开发学习
1、program.cs定义静态main函数入口,生成AddSingleton()方法创建一个Singleton服务,首次请求会创建服务,然后,所有后续的请求中都会使用相同的实例,整个应用程序生命周期都使用该单个实例AddScoped():不同http清求,实例不同,同名谓词不同,也不行。例如httpget跟httppost,作用域是一定范围内,例如从同一个post请求的create方法,只能统计一次,每次请求都是新的实例AddTransient():临时服务,每次请求时,都会创建一个新的Tra原创 2026-02-26 10:50:33 · 39 阅读 · 0 评论 -
C#多线程
C#多线程一、基本概念1、进程首先打开任务管理器,查看当前运行的进程:从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢?进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败转载 2020-12-01 11:25:12 · 307 阅读 · 0 评论 -
c#的[xxxAttribute]特性
1、什么是Atrribute首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化转载 2021-02-25 10:44:49 · 477 阅读 · 0 评论 -
代码规范C#版
1规范目的 ……………………………………………………… 32适用范围 ……………………………………………………… 33代码注释 ……………………………………………………… 3 3.1 代码注释约定............................................ 3 3.2 模块头部注释规范...................................... 3 3.3 方法注释规范.......................转载 2022-02-25 14:53:04 · 1264 阅读 · 0 评论 -
依赖注入2-DI
IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用“好莱坞原则”是应用程序以被动的方式实现对流程的定制。我们可以采用若干设计模式以不同的方式实现IoC,比如我们在上面介绍的模板方法、工厂方法和抽象工厂,接下来我们介绍一种更为有价值的IoC模式,即依赖注入(DI:Dependency Injection,以下简称DI)。目录一、由外部容器提供服务对象二、三种依赖注入方式 构造器注入 属性注入 方法注入三、实例演示:创建...转载 2020-12-22 19:27:47 · 227 阅读 · 0 评论 -
C#web服务开发
1、Program.cs声明程序入口static main()函数,用startup内方法创建和初始化web类对象 Startup.cs初始化内容,涉及路由设计和服务绑定、依赖注入等全局初始化2、web服务添加AddSingleton()方法创建一个Singleton服务,首次请求会创建服务,然后,所有后续的请求中都会使用相同的实例,整个应用程序生命周期都使用该单个实例AddScoped():不同http清求,实例不同,同名谓词不同,也不行。例如httpget跟httppost,作...原创 2021-02-22 17:01:15 · 4773 阅读 · 0 评论 -
C#的socket:tcp/udp/unix
tcp_socketserverusing System;using System.Net;using System.Net.Sockets;using System.Text;namespace tcpserver{ /// <summary> /// Class1 的摘要说明。 /// </summary> class server { /// <summary> ///..原创 2020-12-02 19:27:47 · 578 阅读 · 0 评论 -
依赖注入1-IoC
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务,ASP.NET在内部专门维护了一个DI容器来提供所需的服务。要了解这个DI容器以及现实其中的服务提供机制,我们先得知道什么是DI(Dependence Injection),而一旦我们提到DI,又不得不说IoC(Inverse of Control)。目录一、流程控制的反转二、对流转载 2020-12-22 17:18:21 · 216 阅读 · 0 评论 -
swagger自动创建接口文档用法
现在的开发大部分都是前后端分离的模式了,后端提供接口,前端调用接口。后端提供了接口,需要对接口进行测试,之前都是使用浏览器开发者工具,或者写单元测试,再或者直接使用Postman,但是现在这些都已经out了。后端提供了接口,如何跟前端配合说明接口的性质,参数,验证情况?这也是一个问题。有没有一种工具可以根据后端的接口自动生成接口文档,说明接口的性质,参数等信息,又能提供接口调用等相关功能呢? 答案是有的。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 We转载 2021-02-25 17:27:49 · 4180 阅读 · 0 评论 -
GCC动态链接库规范和问题
对于动态链接库,实际的符号定位是在运行期进行的,在编译.so的时候,如果没有把它需要的库和他一起进行联编,比如libx.so 需要使用uldict, 但是忘记在编译libx.so的时候加上-luldict的话,在编译libx.so的时候不会报错,因为这个时候libx.so被认为是一个库,它里面存在一些不知道具体实现的符号是合法的,是可以在运行期指定或者编译另外的二进制程序的时候指定。(2) 连接库参数的顺序不对。(4) /lib 和 /usr/lib (64位下是/lib64和/usr/lib64)转载 2023-02-14 15:04:09 · 762 阅读 · 0 评论 -
深入解析linux动态链接
动态连接是现在操作系统中程序的默认使用方式,非常重要。但是搞懂动态连接你必须真正掌握静态连接。不然你是看不明白的。转载 2022-12-01 15:06:24 · 963 阅读 · 0 评论 -
基础进程通信方式
1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。int fd[2];//0读出,1写入pipe(fd);int pid = fork();if(pid==0){ close(fd[1]); read(fd[0], buf, len);}else if(pid>0){ close(fd[0]); write(fd[1], buf, len);}2.高级原创 2022-05-13 10:23:32 · 270 阅读 · 0 评论 -
代码规范个人版
代码规范分:1、可读性编写规范2、安全性执行规范个人规范标准:一、命名规范匈牙利命名法:广泛应用于Microsoft Windows这类环境中。驼峰命名法(Camel/小驼峰):第一个单词首字母小写,余下的单词首字母大写。帕斯卡命名法(Pascal/大驼峰):所有单词首字母大写。下划线命名法:下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。1、...原创 2022-02-25 15:04:18 · 539 阅读 · 0 评论 -
linux的so动态库可执行(节.interp)
代码如下mytest.c#include<stdio.h>#include<stdlib.h>//在elf格式中加入一个节.interp 此节含有 ELF 程序解析器的路径名//如果动态库不包括此节就不能被执行//注意你的连接器地址不一定是/lib64/ld-linux-x86-64.so.2这个路径哈 自己查找下你环境中的连接器地址const char ldpath[] __attribute__ ((section (".interp"))) = "/li...原创 2021-08-17 11:13:16 · 1094 阅读 · 0 评论 -
c语言规范历史
1972年C语言诞生,C语言之父是丹尼斯·里奇(Dennis Ritchie),同时也是UNIX之父。C语言标准发布顺序:K&R C:1978年由布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)出版了《The C Programming Language》,这本书被C语言开发者们称为K&R,很多年来被当作C语言的非正式标准。人们称这个版本的C语言为K&R C。 ANSI C:1989年ANSI发布了C语言标准,被称为C89、AN原创 2021-04-15 00:25:20 · 570 阅读 · 0 评论 -
重定向动态库中的输出
问题已解决,解决方案如下:1.一个全局的文件描述符用来记录原来的标准输出文件描述符2.封装俩个函数,功能分别是打开和关闭标准输出文件描述符的函数3.封装一个输出函数,函数内部调用第二步封装的打开函数,然后输出,接着调用关闭函数4.main函数逻辑。首先调用第二步封装的关闭函数,接着如需输出信息则调用第三步封装的输出函数,代码如下:#include<stdio.h>#include <stdlib.h>#include<unistd.h>#include原创 2021-04-06 16:57:11 · 604 阅读 · 0 评论 -
Mystery.c
#include <stdio.h>main(t,_,a )char* a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-86,0,a+1 )+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+.原创 2021-03-31 21:41:20 · 353 阅读 · 0 评论 -
Linux的共享内存
一、shm方式和mmap方式区分 二者本质上是类似的,mmap可以看到文件的实体,而 shmget 对应的文件在交换分区上的 shm 文件系统内,无法直接 cat 查看 安全性:mmap 方式对应的真实文件,如果用户有权限即可查看,甚至删除 shmget 方式其实也一样,好了一层皮罢了(ipcrm -m …) 一致性:mmap 方式下各进程映射文件的相同部分可以共享内存 shmget 时各个进程共享同一片内存区...原创 2021-02-19 11:55:11 · 1038 阅读 · 0 评论 -
setsockopt常用设置
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAI原创 2021-01-28 11:40:36 · 601 阅读 · 1 评论 -
压缩算法和压缩库
LZ4LZ4能很好的支持多线程环境,获得更高的压缩和解压速度。QuickLZQuickLZ官网:http://www.quicklz.com/QuickLZ is the world's fastest compression library, reaching 308MB/s per core.QuickLZ自称是世界上最快的压缩算法,然而我们看到它和LZ4还是有差距的,特别是解压速度。snappysnappy项目:https://code.google.c..原创 2020-12-15 14:55:07 · 2433 阅读 · 0 评论 -
fork在多线程下的使用
谨慎使用多线程中的fork2015-02-07 19:23origins 阅读(16611) 评论(4)编辑收藏前言在单核时代,大家所编写的程序都是单进程/单线程程序。随着计算机硬件技术的发展,进入了多核时代后,为了降低响应时间,重复充分利用多核cpu的资源,使用多进程编程的手段逐渐被人们接受和掌握。然而因为创建一个进程代价比较大,多线程编程的手段也就逐渐被人们认可和喜爱了。记得在我刚刚学习线程进程的时候就想,为什么很少见人把多进程和多线程结合起来使用呢,把二者结合起来不是更...转载 2020-11-30 15:59:24 · 1059 阅读 · 0 评论 -
fuzzing工具之AFL的安装与使用
fuzzing工具之AFL的安装与使用AFL介绍:AFL即American Fuzzy Lop是当今使用最广泛的fuzzer,这个工具在程序执行前对程序源码进行插桩(instrumentation),以便在程序执行过程中实时获取程序的执行情况。AFL用遗传算法对程序的输入进行变异,用边覆盖(edge converage)来测试fuzzing的性能。在执行过程中,AFL向被测程序中输入input,然后获取程序的覆盖率,将覆盖率大的input保留下来进行变异,然后在下一轮测试中向被测程序中输出这些变转载 2020-09-03 15:44:50 · 839 阅读 · 0 评论 -
linux下把进程/线程绑定到特定cpu核上运行
概述现在大家使用的基本上都是多核cpu,一般是4核的。平时应用程序在运行时都是由操作系统管理的。操作系统对应用进程进行调度,使其在不同的核上轮番运行。对于普通的应用,操作系统的默认调度机制是没有问题的。但是,当某个进程需要较高的运行效率时,就有必要考虑将其绑定到单独的核上运行,以减小由于在不同的核上调度造成的开销。把某个进程/线程绑定到特定的cpu核上后,该进程就会一直在此核上运行,不会再被操作系统调度到其他核上。但绑定的这个核上还是可能会被调度运行其他应用程序的。操作系统对多核cpu的调度转载 2020-09-02 11:03:24 · 400 阅读 · 0 评论 -
GCC和C99标准中inline
GCC和C99标准中inline使用上的不同之处本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任原创 2020-08-25 17:50:47 · 936 阅读 · 1 评论 -
linux项目文件编译
linux项目文件编译原创 2020-08-18 16:33:22 · 248 阅读 · 0 评论 -
vs的linux开发
https://www.cnblogs.com/apocelipes/p/10899484.html通常,当我们开发Linux程序时有两种方案:在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发虽然我自己是在Linux环境上直接进行开发的,但也有许多的人是在Windows环境上从事开发工作的,如果离开自己熟悉的系统到陌生的环境上也许会影响到工作效率。因此今天我们就来看下如何在Windows上使用Visual Studio 2019进行Li转载 2020-07-28 19:01:45 · 1415 阅读 · 1 评论 -
CLR/CIL/CTS/CLI/BCL/FCL
CLR:公共语言运行库(CommonLanguageRuntime)CIL:通用中间语言(CommonIntermediateLanguage,简称CIL)CTS:通用类型系统(CommonTypeSystem)CLI:公共语言基础架构(CommonLanguageInfrastructure)BCL:基础类库(BaseClassLibrary)FCL:框架类库(FrameworkClassLibrary)...原创 2020-06-29 23:24:41 · 616 阅读 · 0 评论 -
Linux中的各种锁及其基本原理
Linux中的各种锁及其基本原理1.概述通过本文将了解到如下内容:Linux系统的并行性特征 互斥和同步机制 Linux中常用锁的基本特性 互斥锁和条件变量2.Linux的并行性特征Linux作为典型的多用户、多任务、抢占式内核调度的操作系统,为了提高并行处理能力,无论在内核层面还是在用户层面都需要特殊的机制来确保任务的正确性和系统的稳定运行,就如同一个国家需要各种法律条款来约束每个公民的行为,才能有条不紊地运转。在内核层面涉及到各种软硬件中断、进线程睡眠、抢占式内核调度、多处理转载 2020-06-24 10:31:01 · 546 阅读 · 0 评论 -
DPDK
高性能网络技术#随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络结构,无不体现出这种创新与融合。这在使得网络变得更加可控制和成本更低的同时,也能够支持大规模用户或应用程序的性能需求,以及海量数据的处理。究其原因,其实是高性能网络编程技术随着网络架构的演进不断突破的一种必然结果。C10K 到 C10M 问题的演进#如今,关注的更多是 C10M 问题(即单机 1转载 2020-06-04 19:18:38 · 7866 阅读 · 1 评论 -
windows和Linux内存的对齐方式
一.内存对齐的初步解说内存对齐能够用一句话来概括:“数据项仅仅能存储在地址是数据项大小的整数倍的内存位置上”比如int类型占用4个字节,地址仅仅能在0,4,8等位置上。例1:#include <stdio.h>struct xx{ char b; int a; int c; char d;};int main(){ struct xx bb; printf("...转载 2020-05-11 15:45:16 · 604 阅读 · 0 评论 -
gcc多版本安装
1、安装SCL源yum install centos-release-scl-rh2、安装GCC/GCC-C++yum install devtoolset-7-gcc devtoolset-7-gcc-c++yum install devtoolset-8-gcc devtoolset-8-gcc-c++yum install devtoolset-9-gcc devtool...原创 2020-05-07 11:44:54 · 3735 阅读 · 0 评论 -
flock、lockf和fnctl区别
首先flock和fcntl是系统调用,而lockf是库函数。lockf实际上是fcntl的封装,所以lockf和fcntl的底层实现是一样的,对文件加锁的效果也是一样的。后面分析不同点时大多数情况是将fcntl和lockf放在一起的。下面首先看每个函数的使用,从使用的方式和效果来看各个函数的区别。1. flock函数原型int flock(int fd, int operation)...转载 2020-05-06 10:54:10 · 1142 阅读 · 1 评论 -
linux下c获取网卡信息
在Linux下开发网络程序时,经常会遇到需要取本地网络接口名、IP、广播地址、子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR、SIOCGIFADDR、SIOCGIFBRDADDR与SIOCGIFNETMASK作为参数调用函数ioctl分别获得MAC地址、IP地址、广播地址与子网掩码来实现。一次性获取此类信息的C语言代码实现如下。 1 #inc...转载 2020-04-30 16:21:42 · 1376 阅读 · 0 评论 -
gdb调试备忘
gdb progfile指令r:运行bt:查看当前地址堆栈1. 普通断点根据代码行数设置断点是最常见的一种方式,在debug程序运行前就可以进行断点的配置。如:(gdb) b src/main.cpp:127当程序执行到main.cpp文件的第127行时就会出发断点。2. 条件断点顾名思义,这种断点是当满足一定条件时才会触发,比较适合进行异常排查。设置方式(...原创 2020-04-26 17:21:26 · 205 阅读 · 0 评论 -
数组指针/指针数组和一二级指针
首先确定优先级:()>[]>*,另外数组指针,类比整型指针,表示指向数组的指针;指针数组,类比整型数组,表示元素为指针的数组。数组指针int (*p)[n] 首先()优先级高,它是一个指针,指向一个整型数组。n为数组的长度,当p+1时需要跨越n个整型数据的长度,通常用来表示二维数组及二维数组的函数传参。一维数组赋值给数组指针时,需要取数组地址或对其进行强制转换,另外相当于二...转载 2020-04-17 15:12:08 · 431 阅读 · 0 评论 -
ioctl
一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, ind cmd, …); 其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是...原创 2020-04-14 14:10:36 · 368 阅读 · 0 评论 -
select/poll/epoll
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...原创 2020-04-14 11:39:07 · 215 阅读 · 0 评论 -
exec系列函数
linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用本节目标:exec替换进程映像 exec关联函数组(execl、execlp、execle、execv、execvp)一,exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种...转载 2020-04-11 11:02:55 · 330 阅读 · 0 评论 -
fork()函数详解
fork()函数详解一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程...转载 2020-03-31 17:03:15 · 4075 阅读 · 2 评论 -
C语言实现Base64编码转码
C语言实现Base64编码转码关于Base64的介绍有两篇文章已经做得非常好了:一篇是维基百科Base64的词条,如果被Q可以看本文????摘录维基百科Base64;另一篇是阮一峰的Base64笔记.说一说C语言的实现吧,其实维基百科给出了C语言的实现了,但是它用以处理File,当然原理都是一样的,File的处理其实可以放在外面做好.另外,根据Base64介绍可以看出来它以6比特为一个单元...转载 2020-03-30 10:15:49 · 3714 阅读 · 0 评论
分享