11 Shonm

尚未进行身份认证

我要认证

用blog记录点点滴滴。。。成长的轨迹一步一个印

等级
TA的排名 1w+

从文件 I/O 看 Linux 的虚拟文件系统

1 引言Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而执行。如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘;而这样的操作涉及到两个不同的文...

2019-07-31 12:56:36

C++11 lambda函数

用过脚本语言的童鞋都知道,函数的定义可以在任何地方,例如:local function table_sort(t) local function sort_by_len(t1, t2) return #t1 < #t2 end table.sort(t, sort_by_len) --上面的代码也可以简写为:...

2019-06-14 15:34:35

最简makefile教程(二)

上篇讲解了makefile的基础知识,这篇介绍点更有意思的,能够大幅度提高编写编译指令效率的方法。有这样一个需求,先将文件下的所有c文件编译,然后链接成可执行文件。你不会要我写如下的代码吧:app: a.o b.o c.o .... gcc -o app a.o b.o c.oa.o : a.c gcc -c -o a.o a.cb.o : b.c gcc...

2019-06-12 21:53:00

32位与64位下各类型长度对比

4 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。1. 32 位和 64 位C数据类型32和64位C语言内置数据类型,如下表所示:上表中第一行的大写字母和数字含义如下所示:I表示:int类型L表示:long类型P表示:pointer指针类型32表示:32...

2019-06-01 12:42:42

最简makefile教程(一)

一直对makefile文件一知半解,今天好好研究了一下他的用法。研究过后,发现其实makefile语法很简单,核心思想就是执行对应的指令而已,为了叙述方便先从最简单的指令讲起。例如:A : cmd aB : C D cmd bC : cmd cD : cmd d #注意cmd前面必须要有tab键你可以把A,B看作是一个指令标签,也...

2019-05-31 19:21:26

资料速查

一 工具类:1 在线编译https://c.runoob.com2 git操作1) 分支对比https://blog.csdn.net/u011240877/article/details/525866642) 合并指定commit到分支https://blog.csdn.net/ybdesire/article/details/421455973) git...

2019-05-31 17:10:23

自己写http服务器

为了从性能和易用性上测试我写的mu_event的效果,想写一个网络应用来验证一下,正好我的下一个目标是http服务器,所以我决定动手写一个小型的http服务器。其实开源的http服务器有很多,但是出名的都是比较重量级的,不利于学习。所以我找了几个小型的http server项目,抽出其中的http协议解析部分,改动部分代码后,应用在我的项目中使用。我本以为很快就能完成一个基本的项目,后来却...

2019-05-25 15:46:56

用web展示skynet服务详情

之前看到有群友用web来展示skynet服务的详细信息,其实原理很简单,利用skynet自身提供的调试接口即可。最近又在练手写一个web服务器,正好顺道一起实现了。当然目前我这个web器还不能充当一个强大得出web后台,正好我学了点flask,所以后台用flask来实现了,而且用Python处理数据也非常得心应手。对于web前端,我非常缺乏这方面的知识,且内心里面渴望学好前端,因为用前端可以不费劲...

2019-05-17 18:11:21

详解Docker挂载本地目录及实现文件共享

docker挂载本地目录的方法总结Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:# docker run -it -v /test:/soft centos /bin/bash这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以...

2019-04-25 18:12:56

skynet.newservice的实现简析

使用过skynet的童鞋都知道,一般新启动一个服务是调用skynet.newservice函数。至于他的代码实现,相信没有多少人会去看,这篇文章会讲明白为什么skynet.newservice要这么实现。刚开始的时候,我以为sky.newservice只是启动了一个参数是lua文件名的snlua服务,例如skynet.newservice('room'),我天真的认为他的实现如下:loc...

2019-04-17 16:38:00

skynet 简单的消息执行流程情景分析

skynet.lua对比以前优化了一些函数,尤其是对协程的控制,使得消息的处理流程更加清晰。我们现在来一步步剖析这个消息执行流程,加深对skynet reactor模式的理解以及协程的应用。首先看服务的第一条消息是怎么产生,又是如何被处理的。在创建一个snlua服务后第一条消息靠什么来驱动呢?答案是靠自己(第一步还是得靠自己,然后别人才有机会接触你),看看下面的代码可以清楚的看到:int...

2019-04-17 12:47:01

skynet答疑一 --skynet.start参数为什么要在定时器中执行

有人在群里问到为什么skynet.start函数的参数为要在一个定时器中执行,不能直接执行吗?skynet.start函数如下:function skynet.start(start_func) c.callback(skynet.dispatch_message) skynet.timeout(0, function() skynet.init_servic...

2019-04-13 23:31:22

自己写一个网络库的心得

总是在看网络相关的代码,还没有完整的实现过一个网络库。南宋大诗人陆游有云,纸上得来终觉浅,绝知此事要躬行。哈哈这也是我们高中的校训之一。这两周抽了点时间实现了一个小型的网络库,深度参考了muduo,只不过我是用C语言实现的,名字就叫muevent。muduo是用C++的,我为什么要用C语言呢,而且我曾经用C++的时间要远多于C。因为C语言更加接近底层实现,C++干了太多不为人知的事,毕竟...

2019-04-12 19:50:48

skynet socket.lua 读写缓冲区剖析

这两天剖析了一下socket.lua,整体不是很难,主要是数据缓冲区的实现需要好好分析一下。这里读写数据也是用到了缓冲池的思想,为了更加直观的说明代码,还有方便测试,我去掉lua代码,把核心接口直接用C++实现了一遍:#include <stdio.h>#include <string.h>#include <vector>using std::...

2019-03-19 22:40:19

lua面向对象生成实例的正确方式

写lua这么久了,也知道怎么样用lua来实现所谓的面向对象。下面这段代码是我常用来new一个新实例对象的:local Object = {a = 123}function Object:new (data) local data = data or {} setmetatable(data, {__index = self}) return data ...

2019-03-06 22:39:21

lua代码优化

前几天写代码lua时,由于涉及到大量的数值逻辑计算,所以性能至关重要。经过一番研究和调试,总结了如下提高lua代码执行效率的方法:使用缓存这个不论是在lua,在任何语言的程序中都适用,脚本语言显得尤为突出。使用缓存来优化,提高程序性能是一个很大的主题,这里不再详细论述。只需记得,当使用重复数据(或有重叠)时一定要缓存起来,以供后面使用,而不是每次都重新计算,这样会大大提高效率,尤其是涉及到繁...

2019-03-06 15:23:50

skynet lua与c交互相关函数

我们都知道skynet底层是用c实现的,逻辑层用lua实现。那么c底层是怎么样与lua层实现交互的呢?这篇文章将会讲解这方面的内容。系列文章中的skynet怎么启动lua文件讲到了skynet是如何启动lua代码的,无非是调用lua api加载lua文件。有个QQ群友问到c底层究竟是如何调用到lua层的回调函数的,正好这篇文章会分析这个。加载我们的lua逻辑文件后,一般lua 服务都会有一...

2019-02-28 14:52:50

skynet 服务的名字

skynet服务的名字我们在开发过程中会使用到,这篇文章试着讲解一下skynet服务名字的有关内容。首先每个服务在初始化的时候都会调用skynet_command(ctx, "REG", ...)。例如snlua服务调用了skynet_command(ctx, "REG", NULL),logger服务调用skynet_command(ctx, "REG", ".logger"),最终会调用到...

2019-02-26 14:54:05

STL内存管理

这些天在看内存的分配管理的知识,可以参考前面写的文章:linux内存分配管理实现自己的malloc STL是一套非常高效的C++库,提到内存管理,怎么能少了他呢,花了近一天的时间来剖析这个。STL内存分配分为两级,为什么分为两级,就比如你为了买一根普通的皮带,去汉正街批发市场,别人不一定卖给你(亲身经历)。只有一次性购买大量的货才会去批发市场,商家才会和你做生意。内存分配也是这...

2019-01-25 14:43:16

实现自己的malloc

按照上篇文章的思路,自己实现的一个简单malloc:#include <unistd.h>#include <stdio.h>struct header_t { size_t size; //8B unsigned is_free; //4B struct header_t* next; ...

2019-01-19 20:57:58

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。