
工作
leoufung
Linux Kernel,Virtualization
展开
-
qemu: 命令行查找接口
我们经常知道qemu如何使用,但是很难找到对应的处理入口,这时候,我们只要在 main 中查找qemu_opts_foreach 就可以找到对应的入口函数了,比如我们可以看到 -device 选项的帮助函数是device_help_func,处理函数是device_init_func...原创 2020-12-24 15:11:33 · 451 阅读 · 0 评论 -
BA-VCP-DEBUG.txt
################################################################################HOST 安装必要包################################################################################yum -y install fuse fuse-develyum -y install kernel-modules-extravim /etc/grub2.c原创 2020-12-21 10:10:45 · 223 阅读 · 0 评论 -
VIM中空格和TAB的替换
原文地址:VIM中空格和TAB的替换在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:TAB替换为空格::set ts=4:set expandtab:%retab!空格替换为TAB::set ts=4:set noexpandtab:%retab!加!是用于处理非空白字符...转载 2020-12-16 09:12:59 · 1930 阅读 · 1 评论 -
vim用多个标签页打开多个文件
原文地址:vim用多个标签页打开多个文件1、打 开 新 标 签 页启动 Vim 时用 "vim -p filename ...":tabe[dit] *:tabe* *:tabedit* *:tabnew*:tabnew 在当前标签页之后打开带空窗口的新标签页。:tabe[dit] [++opt] [+cmd] {file}:tabnew [++opt] [+cmd] {file} 打.转载 2020-12-15 11:04:24 · 736 阅读 · 0 评论 -
BA-PKT-GEN.txt
################################################################################# HOST 配置#################################################################################vim /etc/grub2.cfg#>>>>>>>>>>>>>>>&.原创 2020-10-08 15:33:06 · 276 阅读 · 0 评论 -
BA-TESTPMD.txt
################################################################################# Test PMD################################################################################# 编译DPDKgit clone git@github.com:DPDK/dpdk.gitcd dpdkgit checkout v19.11 -b v1.原创 2020-10-08 15:32:32 · 341 阅读 · 0 评论 -
BA-OVS-DPDK-VM.txt
################################################################################# OVS DPDK VM 安装#################################################################################vim ~/.bash_profile#>>>>>>>>>>>>>&.原创 2020-10-08 15:32:00 · 228 阅读 · 0 评论 -
BA_vhost-vswitch.txt
################################################################################# HOST 安装必要包################################################################################yum -y install fuse fuse-develyum -y install kernel-modules-extravim /etc/gr..原创 2020-10-08 15:31:15 · 238 阅读 · 0 评论 -
CentOS虚拟机调试标准模板
<domain type='kvm' id='16'> <name>t1_vm</name> <memory unit='KiB'>4097152</memory> <currentMemory unit='KiB'>4097152</currentMemory> <vcpu placement='static'>4</vcpu> <cpu mode='host-model'...原创 2020-09-21 16:27:01 · 294 阅读 · 0 评论 -
per-CPU 的一个好处
per-CPU 变量的更新可以是locklessly 的原创 2020-09-04 11:15:49 · 193 阅读 · 0 评论 -
QDMA v2018.3 遇到的坑(持续更新)
Q1. v2018.3 内核版本C2H无法正常收取报文A1:在descq_process_completion_st_c2h()中, 只有判断到cmpl.f.desc_used 非0 时才会调用rcv_pkt 来收取报文;但是v2018.3 的QDMA 逻辑里面存在问题,并不会将desc_used置位,需要修改parse_cmpl_entry(),“cmpl->f.desc_used = 1; cmpl->len = (cmpt[0] >> S_C2H_CMPT_EN...原创 2020-07-24 11:35:29 · 2069 阅读 · 1 评论 -
查看服务器硬件拓扑信息
在CentOS上查看服务器拓扑信息hwloc-ls原创 2020-07-16 10:29:58 · 650 阅读 · 0 评论 -
GLIB库编程之链表 --- GSlist & Glist
用户空间不用自己编写数据结构,使用GLIB的工具是一个非常好的方式,下面的代码展示GLIB的链表的编程示例#include <stdlib.h>#include <stdio.h>#include <glib.h>/* * 需要安装 * yum install glib2-devel.x86_64 * * 编译方法 * gcc glist_eg.c -g -O0 -lglib-2.0 -I /usr/include/glib-2.0.原创 2020-07-15 12:56:07 · 2147 阅读 · 0 评论 -
KVM环境初搭建【工作笔记】
######################################################################################安装系统###################################################################################### 按F2进入BIOS# 在CPU 配置中的socket1和socket0中查看是否激活了Inter vt-d的功能# 网络配置接口 ens117f3原创 2020-06-30 13:18:50 · 1297 阅读 · 0 评论 -
计算字符串长度 -- C语言
代码实现int mystrlen(char * str){ if(NULL == str){ printf("mystrcpy param error\n"); return 0; } char * c = NULL; int len = 0; c = str; while(*c++ != '\0'){ len++; } return len;}voi...原创 2020-02-24 19:30:04 · 519 阅读 · 0 评论 -
实现memcpy函数 -- C语言
思路这个函数的实现很简单,只要将原内存中的数据逐个复制到目标内存中,使用char进行复制步长最简单,当然,你也可以按照其他长度复制内容。内存是连续的,没有结束,所以不要用 NULL判断,应该用size做判断。注意编程规范和出入参校验。返回值用void * 是为了链式编程使用。废话不多说了,看代码。代码实现void * mymemcpy(void * dst, void * src, ...原创 2020-02-24 18:32:49 · 466 阅读 · 0 评论 -
实现strcpy函数 -- C语言
代码实现int mystrcpy(char * dst, char * src){ if(NULL == dst || NULL == src){ printf("mystrcpy param error\n"); return PARAM_ERR; } char * p = NULL, * q = NULL; p = dst; q = src; while(*q...原创 2020-02-24 18:05:32 · 349 阅读 · 0 评论 -
利用客户函数将字符串转换为数字 -- C语言
思路C/ C++ 提供 了 几个 标准 库 函数, 可以 将 字符串 转换 为 任意 类型( 整型、 长整型、 浮点 型 等) 的 数字。下面 列举 了 各 函数 的 方法 及其 说明。atof(): 将 字符串 转换 为 双 精度 浮点 型 值。atoi(): 将 字符串 转换 为 整型 值。atol(): 将 字符串 转换 为 长整型 值。strtod(): 将 字符串...原创 2020-02-24 17:10:10 · 198 阅读 · 0 评论 -
不是用库函数将字符串转换为整数 -- C语言
代码实现int str2int(char * str, int * rst){ if(NULL == str){ printf("int2str param error\n"); } int num = 0, n = 0, i = 0, k = 0, digit = 0, len = 0; int negative = 0; len = strlen(str); for...原创 2020-02-24 16:25:42 · 275 阅读 · 0 评论 -
不用库函数将整数转换为字符串 -- C语言
思路把整数的按位取出来,放到一个buf里面,但是这时候是反序的,然后再反过来从buf里面拷贝到目标字符串中,如果有符号,目标第一个字符为符号位代码实现int int2str(char * str, int num){ if(NULL == str){ printf("int2str param error\n"); return PARAM_ERR; } int n...原创 2020-02-24 14:57:53 · 1103 阅读 · 0 评论 -
用库函数将数字转换为字符串 -- C语言
说明C 语言 提供 了 几个 标准 库 函数, 可以 将 任意 类型( 整型、 长整型、 浮点 型 等) 的 数字 转换 为 字符串。 下面 列举 了 各 函数 的 方法 及其 说明。itoa(): 将 整型 值 转换 为 字符串。ltoa(): 将 长整型 值 转换 为 字符串。ultoa(): 将 无符号 长整型 值 转换 为 字符串。gcvt(): 将 浮点 型 数 转换...原创 2020-02-24 13:48:46 · 1101 阅读 · 0 评论 -
判别二叉树是否为二叉排序树 -- C语言
算法使用中序遍历的结果就是排序二叉树的排序输出(从小到大), 因此可以使用中序遍历 来实现判定二叉树是否为二叉排序树。注意,不能用递归比较root和left,right的大小关系,因为left,right无法判断和root,root->parent,root->parent->parent等的大小关系代码实现bool isBSTree(st_trNode * ...原创 2020-02-23 23:27:22 · 1987 阅读 · 1 评论 -
二叉树层次遍历 -- C语言
原理这个问题很难 直接 用 节点 的 指针( left、 right、 parent) 来 实现, 但是 借助 一个 队列 就可以 轻松 地 实现, 例如 图 8. 7 所示 的 二 叉 树 结构。 可以 按照 下面 的 方式 执行。(1) A 入队 CX。(2) A 出 队, 同时 A 的 子 节点 B、 C 入队( 此时 队列 有 B、 C)。(3) B 出 队, 同时 B 的...原创 2020-02-23 21:59:36 · 650 阅读 · 0 评论 -
二叉排序树非递归遍历 -- C语言
原理1. 前序遍历对于 先 序 遍历 非 递归 算法, 这里 我们 使用 一个 栈( stack) 来临 时 存储 节点, 方法 如下。(1) 打印 根 节点 数据。(2) 把 根 节点 的 right 入栈, 遍历 左 子 树。(3) 遍历 完 左 子 树 返回 时, 栈 顶 元素 应为 right, 出 栈, 遍历 以该 指针 为 根 的 子 树。2. 中序遍历对...原创 2020-02-23 20:33:45 · 820 阅读 · 1 评论 -
二叉排序树 -- C语言
数据结构二 叉 排序 树( Binary Sort Tree) 又称 二 叉 查找 树( Binary Search Tree)。 其 定义 为: 二 叉 排序 树 或者是 空 树, 或者是 满足 如下 性 质的 二 叉 树。(1) 若 它的 左 子 树 非 空, 则 左 子 树上 所有 节点 的 值 均 小于 根 节点 的 值。(2) 若 它的 右 子 树 非 空, 则 右 子 树上...原创 2020-02-23 20:27:37 · 549 阅读 · 0 评论 -
用链表实现栈 -- C语言
算法草稿top 为链表的tail,botton 为链表的 head代码实现#include <stdio.h>#include <stdlib.h>#include "list.h"#include "stack.h"int dumpStack(st_stack * stack){ if(NULL == stack){ return SUCC...原创 2020-02-20 22:14:22 · 424 阅读 · 1 评论 -
队列的入队、出队、测长、打印 -- C语言
队列的特点是先进先出 FIFO代码实现#include <stdio.h>#include <stdlib.h>#include "list.h"#include "queue.h"int dumpQueue(st_queue * queue){ if(NULL == queue){ return SUCCESS; } st_dataNod...原创 2020-02-20 19:36:03 · 676 阅读 · 0 评论 -
删除两个双向循环链表中相同数值节点 -- C语言
代码实现int removeDoubLoopListNodeByData(st_doubNode ** phead, int data){ if(NULL == phead ){ printf("%s: param error\n",__func__); return PARAM_ERR; } if(NULL == phead){ return SUCCESS; }...原创 2020-02-20 17:12:44 · 618 阅读 · 0 评论 -
双向循环链表的插入 -- C语言
代码实现int insertDoubLoopSortedListNode(st_doubNode** phead, int data){ if(NULL == phead){ printf("%s: param error\n",__func__); return PARAM_ERR; } st_doubNode * head = NULL; st_doubNode * ...原创 2020-02-19 16:14:05 · 2061 阅读 · 0 评论 -
双向链表的快速排序 -- C语言
算法草稿代码实现/* head 和 tail 的指针的排序的时候,都有可能发生变化,所以这里使用二级指针 */int quickSortDoubList(st_doubNode** phead, st_doubNode ** ptail){ if(NULL == phead || NULL == *phead || NULL == ptail || NULL == *ptail)...原创 2020-02-18 23:24:37 · 1471 阅读 · 0 评论 -
双向链表节点的删除 -- C语言
代码实现st_doubNode * removeDoubListNode(st_doubNode** phead, int pos){ if(NULL == phead || pos < 0){ printf("%s: param error\n",__func__); return NULL; } st_doubNode * head = *phead; st_do...原创 2020-02-18 19:03:56 · 1407 阅读 · 0 评论 -
双向链表按照指定位置插入 -- C语言
代码实现void dumpDoubListReverse(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; st_doubNode * tail = NULL; tail = head; while (NULL != tail->next){ tail = tail...原创 2020-02-18 17:02:44 · 1719 阅读 · 0 评论 -
双向链表按位置查找 -- C语言
代码实现st_doubNode * findDoubListPos(st_doubNode * head, int pos){ if(NULL == head || pos < 0){ return NULL; } if(0 == pos) { return head; } st_doubNode * p = NULL; st_doubNode * q = NU...原创 2020-02-18 16:06:33 · 257 阅读 · 0 评论 -
双向链表的查找 -- C语言
代码实现st_doubNode* searchDoubListNode(st_doubNode* head, int num){ if(NULL == head){ return NULL; } st_doubNode* p = NULL; st_doubNode* q = NULL; p = head; while(NULL != p){ if(p->data...原创 2020-02-18 14:20:00 · 1092 阅读 · 0 评论 -
打印双向链表 -- C语言
代码实现void dumpDoubList(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; printf("========= Dump Double List %p ===========\n\t", head); p = head; while (NULL != p){...原创 2020-02-18 14:03:47 · 960 阅读 · 0 评论 -
取得双向链表长度 -- C语言
代码实现int getDoubListLen(st_doubNode * head){ int len = 0; st_doubNode * p = NULL; if(NULL == head){ goto out; } p = head; while(NULL != p){ len++; p = p->next; } out: return le...原创 2020-02-18 13:17:30 · 1230 阅读 · 0 评论 -
双向链表的建立 -- C语言
代码实现void dumpDoubList(st_doubNode * head){ if(NULL == head){ return; } st_doubNode * p = NULL; printf("========= Dump Double List %p ===========\n\t", head); p = head; while (NULL != p){...原创 2020-02-18 13:06:02 · 239 阅读 · 0 评论 -
约瑟夫问题 -- C语言
问题描述据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k...原创 2020-02-17 20:30:45 · 766 阅读 · 0 评论 -
合并有序链表 -- C语言
算法草稿代码实现int MergeSortedList(st_dataNode ** phead, st_dataNode * head2){ if(NULL == phead || NULL == *phead || NULL == head2){ printf("%s: param error\n",__func__); return PARAM_ERR; } ...原创 2020-02-17 16:55:21 · 339 阅读 · 0 评论 -
测试链表是否打环 -- C语言
原理这里 有一个 比较 简单 的 解法。 设置 两个 指针 p1、 p2。 每次 循环 p1 向前 走 一步, p2 向前 走两步。 直到 p2 碰到 NULL 指针 或者 两个 指针 相等 时 结束 循环。 如果 两个 指针 相等, 则 说明 存在 环。代码实现bool whetherListLoop(st_dataNode * head){ if(NULL == head){ ...原创 2020-02-16 22:52:18 · 162 阅读 · 0 评论