自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 将C代码中的warning当做错误处理 -Wall -Werror

在我们平时写c代码的时候,经常不注意会使编译中显示warning,warning有时我们不注意会导致很多的隐形问题,导致有时很难定位问题的所在,如果能够将warning及早的辨识出来,对代码的规范性以及一些隐形的问题的可控性是有所改善的。#include <stdio.h>int main(){ int a; return 0;}上面的代码(假设为t...

2019-07-02 10:45:50 3105

原创 skb form netif_rx to netif_receive_skb

1.函数net_dev_init 网络模块的核心处理模块.static int __init net_dev_init(void){ int i, rc = -ENOMEM; BUG_ON(!dev_boot_phase);/*初始化proc文件系统,*/ if (dev_proc_init()) goto out;/*向sysfs注册为net

2019-06-15 17:29:40 1336

转载 MQTT简单服务器搭建

原文转载:https://baijiahao.baidu.com/s?id=1610057452592802735&amp;wfr=spider&amp;for=pc搭建自己的MQTT服务器 MQTT协议是广泛应用的物联网协议,使用测试MQTT协议需要MQTT的代理。有两种方法使用MQTT服务,一是租用现成的MQTT服务器,如阿里云,百度云,华为云等公用的云平台提供的MQTT服务,使用...

2018-12-06 11:37:03 4690

原创 Error: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.LongWritabl

Error: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.LongWritable, received org.apache.hadoop.io.Text 解决方法,       1.查看定义的类所继承的Mapper&lt;Objiect, Objiect, Obji...

2018-11-06 08:30:35 3698 1

原创 栈上分配内存以及是否初始化对编译出的可执行文件大小的影响

 带着问题上路  问题:          (1  为什么栈上分配内存,分配的空间越大,初始化后编译出的文件越大?          (2)为什么初始化字符串编译出的可执行文件会变大?#include &lt;stdio.h&gt;#define FIVE 5#define BUFF_SIZE  65535//#define BUFF_SIZE  2intmain()...

2018-11-06 00:07:07 944

原创 简单的交换两个数的算法

void swap (int *a, int *b){ *a ^= *b ^= *a ^= *b;}int main(){ int a = 1, b = 2; swap(&a, &b); return 0;}

2018-11-05 21:47:30 601

转载 值得学习的C语言开源项目

值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/...

2018-11-02 10:08:33 297

原创 桥数据包转发(八)

上一节,通过流程图以及源代码结合,我们了解到,数据处理函数br_handle_frame_finsh大致的数据包分类发送的过程这节,简单看一下,数据包的转发过程:无论是在发往本地还是转发,有一个函数的功能是不能忽略的,就是br_handle_vlan函数struct sk_buff *br_handle_vlan(struct net_bridge *br,

2017-08-05 11:04:03 1713 1

原创 桥数据包处理函数——br_handle_frame_finish(七)

上一节我们了解到,数据包如何走进桥,这一节我们简单看看,入口帧处理函数br_handle_frame_finish.作用:br_handle_frame_finish函数主要是决策将不同类别的数据包做不同的分发路径。其函数处理的过程如下图所示:首先判断该数据包是否符合桥转发的条件:    (1)桥端口状态是否是开启状态,如果没有开启则丢掉数据包    (

2017-08-04 11:56:49 8139 1

原创 桥数据包接收----br_handle_frame(六)

从这节开始,我们看看数据包如何在桥中进行转发的一些动作。首先,上节的大蓝图中,标识除了,数据包是如何进入桥的,有一个很重要的函数br_handle_frame这个函数的初始注册地点是在桥添加接口的时候,注册在桥某一个接口上int br_add_if(struct net_bridge *br, struct net_device *dev){ ........ /*注册设备接收帧函

2017-07-27 16:08:31 4928

原创 skb桥转发蓝图(五)

在前几节中,对于桥设备,桥端口的添加删除,初始化等等做了简单的介绍,这节开始我们开始看看数据在桥上是怎么转发的           话不多说,先看一张桥转发时函数调用的一个基本蓝图。这张图中,简单的展示了,数据的接收和发送,其中还包括ebtables的钩子点所处的位置。需要说明的是:       1.我们先暂时忽略数据包从一开始是怎么从驱动进

2017-07-26 17:06:31 2432 3

原创 桥设备及端口的开启和关闭(四)

关于设备的添加删除的基本动作,我们已经知道。这节,我们看看关于网桥设备以及桥设备上的端口的启动和关闭。我们说过,在初始化一个桥设备的时候有这样一个操作:dev->netdev_ops = &br_netdev_ops;br_netdev_ops这个参数,注册了很多函数,其中包括网桥设备的启动和关闭函数br_dev_open和br_dev_stop,这两个函数的工作主要是初始化桥设备的一些队列和

2017-07-24 16:16:34 1200

原创 给网桥添加端口——br_add_if(三)

上一节,我们了解如何,添加一个桥设备的大致步骤,现在我们看看如何在桥设备上添加一个端口。 我们先来看一个命令 brctrl addif br0 eth1 这个命令的作用是在br0上添加一个eth1的接口,内核实现的相关函数是br_add_if. 那么如何调用到这个接口呢? 上节我们在将添加一个桥设备的时候,有一个参数br_netdev_ops,我们当时说这里面有很多

2017-07-21 15:24:42 5382

原创 将int数组与字符串中的数字互转的方法

在linux中有许多时候我们需要将int数组转换为字符数组,或者字符串,但是没有itoa之类的函数怎么办? 下面有几种int数组与字符串互转的方法,以及一些需要注意的小的细节。int main(){ int *arry= NULL; arry = malloc(64); memset(arry,0x0,128); char str[] = "0,1,2,3,4,6,7

2017-07-20 10:16:04 1755

原创 添加一个桥设备——br_add_bridge(二)

上一节,讲述桥模式初始化时需要做的一些事情,这一节,我们一起来看看如何添加一个网桥设备。 我们先来看一个命令: **brctl addbr br1** 上节我们提到一个用来处理ioctl命令的函数br_ioctl_deviceless_stub通过调用brioctl_set,将br_ioctl_deviceless_stub赋值给回调函数br_ioctl_hook,而br_i

2017-07-13 18:41:55 1735

原创 桥初始化(一)

注:章节中的源代码,基于linux内核4.7.4网桥的背景到处都有,在这里就不浪费的时间说废话了。桥接程序的初始化,桥接程序既可以集成在内核中,也可以编译成独立模块。初始化函数br_init和清理函数br_deinit的定义在/net/bridge/br.c中在网桥设备初始化的时候,主要是做一些注册和初始化的操作。static int __init br_init(void){ int

2017-07-13 10:53:04 1486

原创 内核扩展数据包的方法之-----skb_copy_expand

skb_copy_expand是用来拷贝并且扩展原来skb的一个函数。 方法的作用很简单,那么接下来,我们一起看看skb_copy_expand方法的实现方式以及用法。skb_copy_expand原函数/** * skb_copy_expand - 复制并扩展sk_buff * @skb:要复制的缓冲区 * @newheadroom:头上有新的空闲字节 * @newtailro

2017-06-15 10:14:08 4874 1

转载 linux glibc2.12到2.14升级

linux centos glibc 2.12 到 2.14有些软件可能要求系统的 Glibc 高于某个版本才可以正常运行。如果您的 Glibc 低于要求的版本,为了运行这些软件,您就不得不升级您的 Glibc 了 。您可以寻找已经编译好的 rpm 包或者使用源代码的方式升级 Glibc。如hadoop2.6.5所需要的就是2.14步骤:    1. 查看当前系统g

2017-05-19 16:42:24 7341 1

libubox-2018-07-25.tar.gz

libubox2018-07-25 源码,比较好的linux开发组件,支持c c++,可供下载学习,及使用

2020-04-08

空空如也

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

TA关注的人

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