follow_blast的博客

去寻找C语言的美

用c实现一个阻塞的消息队列

该消息队列的实现,完全是符合posix标准。 实现了 1.读时,队列空,会阻塞 2.写时,队列满,会阻塞 为了保证线程安全,采用了互斥量,为了阻塞一定时间,采用了条件变量,二者一起用,实现了一个简单消息队列 simple_queue.c #include #include #include #in...

2018-01-10 10:44:04

阅读数 1615

评论数 3

select/poll/epoll函数的区别

1.多路IO复用 监测多个事件,一旦某个事件发生了,就进行相应的处理 select、poll、epoll就是实现了这个机制,但是实现一些区别 2.select、poll函数 这2者的差别不太,都有一些性能上的弊端,select函数是监测的文件描述符有限制(用数组保存需要监测的文件描述...

2018-10-12 09:39:44

阅读数 104

评论数 0

libevent分析和使用

1.libevent介绍 libevent是一个轻量级的基于事件驱动的高性能的开源网络库,支持多种系统,对不同系统的函数进行再次封装统一接口,编译的时候,选择自己的系统就行了 因为libevent的出色的轻量级、高性能的表现,很多其他的开源库基于此库,开发出了适应更多场景的开源库  例如m...

2018-10-11 16:03:47

阅读数 21

评论数 0

Linux驱动入门

1. 什么是驱动程序 驱动程序是操作系统和硬件中间的一个抽象层,Linux把所有的设备都抽象成文件,驱动程序屏蔽各个硬件设备差异,提供统一的接口,利于上层开发 驱动程序编写主要是通过查看外设芯片手册,根据手册完成设备的初始化、读写、控制等一系列函数的编写 2.编写驱动程序准备 驱动程...

2018-09-26 11:37:20

阅读数 135

评论数 0

void和void*以及NULL、0和'\0'

1.void和void* void:主要是声明函数没有返回,函数没有参数,void不能修饰变量 void*:表示一个"无类型"的指针, 无类型的指针可以包容所有其他有类型的指针,有类型指针不包容其他指针 void*指针可以接纳一切指针,但是void*指针...

2018-09-06 09:51:58

阅读数 187

评论数 0

strcpy、strncpy、memcpy、memmove之间的区别和实现

1.函数声明 char* strcpy(char *d_s, const char *s_s); char* strcpy(char *d_s, const char *s_s, size_t n); void* memcpy(void *d_s, const void *s_s, size...

2018-09-05 16:54:13

阅读数 39

评论数 0

callback函数详解

在项目中经常会看到一些callback函数,callback函数实现了用户自定义处理 主要表现在C语言的面向对象编程、异步处理 C语言中的callback函数的实现,主要是利用了函数指针 废话不多说,直接贴代码 #include<stdio.h&gt...

2018-08-30 10:32:23

阅读数 503

评论数 0

git教程

git是一个分布式版本控制系统,svn是集中式版本控制系统 git是Linux之父Linus开发出来的(喝水不忘挖井人) GitHub的出现,让git正真大火,GitHub为很多开源项目提供git存储,GitHub是所有软件开发人员都喜欢的地方 集中式:有一个中央服务器,版本库存放在中央服务...

2018-08-29 18:36:11

阅读数 24

评论数 0

tcp和udp的区别

1.最大的区别 tcp是可靠的、面向连接的协议,udp是不可靠、非连接协议,这个区别决定了2者的其他的区别 连接就像是打电话,非连接就像邮局寄信 可靠是因为tcp有重传机制,当write时(假设缓冲区足够大),实际是写入缓冲区,只有当数据被另一方接收了(另一方回传了ack信号)时,才会把刚才...

2018-08-28 14:57:47

阅读数 38

评论数 0

core dump文件的生成和使用

1.什么是core dump文件 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异...

2018-08-27 19:50:22

阅读数 259

评论数 0

同步、异步、阻塞、非阻塞

1.经典答案 同步和异步关注消息通信机制 同步:发出一个调用,在没有得到结果之前,该调用不返回 异步:调用发出之后,直接返回,不等待结果,被调用者会通过消息、状态来通知调用者或通过回调函数来处理这个调用 阻塞和非阻塞关注程序在等待结果(消息、返回值)时的状态 阻塞:调用结果在返回之前,线...

2018-08-27 15:07:52

阅读数 35

评论数 0

静态库和动态库使用详解

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此好用的轮子大家一起用。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种: 静态库.a(win 系统下是lib)和动态库.so(win 系统下是.dll...

2018-08-23 19:08:24

阅读数 74

评论数 0

lua调用c详解(Windows版+Linux版)

1.lua调用c的原理 lua提供一个require函数,用来加载lua模块,lua模块分为lua写的模块和c写的模块,对于c写的模块,C模块在使用以前必须首先加载并连接,在大多数系统中最容易的实现方式是通过动态连接库机制,所以lua调用c,实际就是调用c程序打包成的so(Linux)和dll(...

2018-08-17 17:11:56

阅读数 200

评论数 0

c调用lua详解(Windows版+Linux版)

1.c调用lua的实现原理 lua语言是c语言实现的,而且是非常轻量级的,非常适合内存受限的嵌入式产品 c调用lua,需要在c程序中模拟出lua解释器环境,所以需要调用lua的函数,即生成c程序必定要链接lua库,lua解释器和C是通过一个虚拟栈来交换数据的 栈的大小可以设置,通过查看l...

2018-08-16 10:57:44

阅读数 873

评论数 0

hpp头文件与h头文件的区别

hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的c...

2018-08-15 16:38:50

阅读数 1094

评论数 0

stdafx.h到底有什么用

我发现自己养成了一个比较好的习惯,有关编程的事情,一定知其然知其所以然 因为刚刚接触使用VS的时候,所以很多这个IDE的很多东西不清楚 例如:在新建一个项目的时候,很多时候有stdafx.h,我就在想这个文件究竟是干什么的 1.预编译头 头文件夹下会默认有头文件stdafx.h,而源文件夹...

2018-08-15 16:26:44

阅读数 9561

评论数 1

Makefile理论到实践

1.什么是Makefile 工程按功能、模块把不同的文件放在不同的目录下面,当我们生成一个target的时候,需要知道生成这个target需要哪些文件,以及用什么方法生成,Makefile就是一个这样的文件,定义了一系列的规则,定义了这个target需要哪些依赖文件、生成的规则,Make命令工具...

2018-08-12 23:47:56

阅读数 52

评论数 0

半小时深入理解各种字符编码

开始之前,先讲一个故事 A国家里面,有甲、乙2个人,他们想在电脑上显示字符‘a’,甲认为用0101010来表示a,乙认为用1010101,A国家为了解决这个问题,有关部门经过研究自己所有用过的128字符,制定一个规则,认为用7位就可以表示所有的字符,并且认为a应该用1100001表示。 无独有...

2018-07-23 19:22:47

阅读数 79

评论数 0

函数调用过程中的栈帧分析

说到函数调用和栈帧,就不得不提到另外一个名词“栈”,栈的主要特点:先入后出,后入先出(就像叠罗汉一样),增长的方向,高地址向低地址生长,系统自动回收我们都知道局部的自动变量都是存放在栈上面的,那么栈帧又是什么呢?栈帧首先是存储在栈上,栈帧记录过程调用的一些信息的,例如传入参数、函数的返回地址、函数...

2018-06-28 11:44:52

阅读数 81

评论数 0

寄存器知识大杂烩

1.寄存器是什么寄存器是一个容器,一个存储信息的容器,和内存差不多,不过寄存器比内存更加稀有。寄存器有分为cpu中的寄存器和外设的寄存器,我们常常说的寄存器,一般是说cpu中的寄存器2.有哪些寄存器8086 cpu中的寄存器总共14个,且均为16位分别是AX BX CX DX SP BP SI D...

2018-06-21 19:14:55

阅读数 98

评论数 0

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