linux 用户态编程
linux用户态相关的编程调试
hello-Will
软件开发学习交流
展开
-
linux中对SQLite3函数的封装
个人对SQLite3数据库函数增删改查的封装/*version 1.0*/#include #include #include #include #include #define PATH "water.db" //可以根据具体情况更改数据库地址char *zErrMsg = NULL;const char *Error = NULL;sq原创 2014-12-21 15:22:37 · 1417 阅读 · 1 评论 -
linux下查找某个目录下的具体目录,删除过期文件
删除当前目录下的所有超过90天的log文件#!/bin/shfor folder in $(find . -type d -name log)doecho $folderfind $folder -type f -mtime +91 -exec rm -rf {} ;done原创 2020-07-31 17:36:47 · 820 阅读 · 0 评论 -
SOCAT详解
概述socat,是linux下的一个工具,其功能与有“瑞士军刀”之称的netcat类似,不过据说可以看做netcat的加强版。的确如此,它有一些netcat所不具备却又很有需求的功能,例如ssl连接这种。nc可能是因为比较久没有维护,确实显得有些陈旧了。安装Ubuntu上可以直接sudo apt-get install socat,其他发行版没试过。也可以去官网下载源码包socat link :http://www.dest-unreach.org/socat/基本语法1socat [opti转载 2020-07-15 16:51:42 · 44637 阅读 · 0 评论 -
linux x86 vs arm&mips 启动流程对比
做linux 开发的需要了解启动流程,不建议一下子就钻进去研究整个流程(你会发现流程很复杂,细节很多),建议带着问题去看,不如优化启动流程时间,然后分阶段的处理,这样效果会好很多。在我们做开发的过程中不同架构下linux的启动流程稍有不同,下图展示,建议遇到问题再对应阶段具体分析。1:x862:arm & mips...原创 2020-07-10 11:37:06 · 633 阅读 · 0 评论 -
linux 必先利其器之总纲--工具包
linux经常会遇到调试问题,下面这些工具助大家提高效率,节省时间1:linux performance Observability tool2:linux Static performance Tools3: linux performance Tuning tools4:bpftrace/eBPF Tools5:linux bcc/BPF Tracing Tools6: linux performance observability :sar7: linux performan原创 2020-07-03 17:43:34 · 268 阅读 · 0 评论 -
linux必先利其器篇之--GDB详解
gdb调试完整示例(教程):ncurses我对在网上找到显示命令而不显示其输出的“ gdb示例”感到有些沮丧。 gdb是GNU调试器,Linux上的标准调试器。在观看《给我15分钟》链接: link.时,我被提醒缺乏示例输出,我将改变Greg Law在CppCon 2015上对GDB演讲的看法,所幸其中包括输出! 15分钟是值得的。这也启发了我分享一个完整的gdb调试示例,其中包括输出和涉及的每个步骤,包括死胡同。这不是一个特别有趣或陌生的问题,它只是例行的gdb调试会话。但是它涵盖了基础知识,并且可以翻译 2020-07-03 17:15:27 · 1493 阅读 · 0 评论 -
同步和异步详解
同步和异步发送, 接收和回应操作可能是同步或者异步的,一项同步操作阻塞后面的流程知道这个操作结束。一个异步的操作是非阻塞的,只是初始化操作。 调用者可以通过其他机制来发现操作的完成请款。同步操作需要理解什么是操作完成。 在远程任务中,发送方和接收方操作在信息发送给接收者收到后结束,在远程调用的情况下,发送,接收和回复完成判断标准是确定接收方时间偶到回应,例如有一个返回值。另外,发送和接收结...原创 2020-01-10 11:19:03 · 550 阅读 · 0 评论 -
一种内部nosql数据库订阅发布机制的设计
内部nosql数据库订阅发布机制本篇文章主要介绍我们内部的nosql 数据库 wdb实现了内部订阅发布机制的实现细节两个进程:Switch_process wdb_processSwitch_process 订阅 wdb_process的数据, 当数据发生改变后发布给switch_process订阅1: wdb_pm_subscribe_tbl(TBL_ARPINSP, brg_vl...原创 2019-11-13 09:54:21 · 222 阅读 · 0 评论 -
进程间通信 IPC 系列一 消息队列
本系列主要根据内核代码,分析 消息队列 共享内存 信号量 三种 进程间通信的方法。内核 目录下有个ipc文件夹, 实现代码在这个里面linux/ipc$ lsbuilt-in.a ipc_sysctl.c modules.order mqueue.c msgutil.c sem.c syscall.c util.hcompat.c Makefile mq_...原创 2019-11-12 18:03:50 · 364 阅读 · 1 评论 -
OVS代码笔记
OVS代码笔记>> 原创文章,转载请保留地址,欢迎交流学习ovsdb-client:从main开始分析:1、for (command = get_all_commands(); ; command++) {if (!command->name) {VLOG_FATAL("unknown command '%s';...原创 2019-03-18 07:42:09 · 673 阅读 · 0 评论 -
U-boot引导内核流程分析
U-boot引导内核流程分析1. 加载内核当U-boot完成重定位和初始化外设后,它将正式进入工作状态,可以加载内核镜像到DDR的链接地址中了,具体的地址也可以通过bootcmd这个环境变量来指定,内核镜像有两种加载方式:一种是通过tftp将镜像文件直接引导入DDR中内核的链接地址(对于s5pv210来说是30008000),这种方法很适合调试另一种是从存储介质中的特定扇区读取,这个扇区...转载 2018-11-14 18:44:28 · 1034 阅读 · 0 评论 -
Linux 内核数据结构bitmap
bitmap将一片连续的空间作为一个数据类型,其中的成员都是1位,长度是bitmap的容量。#include <stdio.h>#include <stdlib.h>#define MAX_PRIO 10000#define BITS_PER_LONG 32#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / ...原创 2018-11-03 21:19:20 · 1220 阅读 · 0 评论 -
局部变量内存分配详解
#include <stdio.h>int main(){#if 1 int a; char b; int c; char d; a=1; b='2'; c=3; d=4; printf("0x%x 0x%x 0x%x 0x%x\n ", &a, &b,&c,&d);...原创 2018-04-28 15:48:41 · 4409 阅读 · 0 评论 -
linux内核数据结构之kfifo
1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟发送。为了保证进程A减少等待时间,可以在A和B之间采用一个缓冲区,A每次将数据存放在缓冲区中,B每...转载 2018-04-11 14:53:54 · 271 阅读 · 0 评论 -
phy基础知识总结 common register总结
PHY篇以太网PHY标准寄存器分析PHY是IEEE802.3中定义的一个标准模块,STA(station management entity,管理实体,一般为MAC或CPU)通过SMI(Serial Manage Interface)对PHY的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。PHY寄存器的地址空间为5位,从0到31最多可以定义32个寄存器(原创 2018-01-17 15:09:48 · 22309 阅读 · 2 评论 -
git-svn使用教程
1. 下载一份代码 git svn clone **** --username=***2. 查看log git log (git svn log -v 可以显示每次修改提交的文件) git log -p (可以查看每次提交log和对应的修改内容) git log --stat (可以查看每次提交log和对应的修改文件)3. 查看某人的log原创 2017-10-16 10:45:24 · 13628 阅读 · 0 评论 -
kmalloc、vmalloc、malloc的区别
简单的说:kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存 kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保证任何东西(这点是自己猜测的,不一定正确)kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大 内存只有在要被DMA访问的时候才需要物理上连续 vmalloc转载 2017-01-05 17:56:01 · 436 阅读 · 0 评论 -
进程间通信之管道篇
进程间通信之管道篇 一:管道实现原理在 Linux 中, 管道是一种使用非常频繁的通信机制。 从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题, 具体表现为:· 限制管道的大小。 实际上, 管道是一个固定大小的缓冲区。 在 Linux 中, 该缓冲区的大小为 1 页, 即 4K 字节, 使得它的大小不象文件那样不加检验地增原创 2016-10-27 17:14:52 · 1163 阅读 · 0 评论 -
log4cplus在linux下的安装和使用(1)
日志系统log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的原创 2014-12-22 10:37:29 · 1659 阅读 · 1 评论 -
linux下用cjson实现对数据键值对的封装保存
linux下用cjson实现对数据键值对的封装保存 json数据打包解包原创 2015-01-12 13:54:46 · 1378 阅读 · 0 评论 -
strtok函数的妙用,分割字符串
strtok分割字符串函数,很好的解决了字符分割的要求,不必遍历取关键字再区后面字符这样字符串中查找关键值获取后面的东西就方便多了原创 2015-01-13 11:25:11 · 1232 阅读 · 0 评论 -
linux用户程序是怎么和驱动程序联系起来ioctl/write
我们在使用ioctl和write函数时,知道向里面读数据,写数据,写入控制命令,write函数合ioctl是怎样实现的的呢,用户程序和驱动程序是怎样联系起来得,?这个其实都在你写的驱动程序里面,驱动程序里面的定义原创 2014-12-25 14:52:54 · 1101 阅读 · 1 评论 -
stat函数的man手册
还是英文的比较美,有什么地方不懂得可以问问NAME top stat, fstat, lstat, fstatat - get file statusSYNOPSIS top #include #include #include int stat(const char *p转载 2015-02-02 15:09:23 · 907 阅读 · 0 评论 -
opendir,closedir,readdir ,telldir的·使用详解及例子
linux下查找文件夹下的目录,扫描目录。得到要查找的东西 ,linux一切皆文件说的就是这个道理,其实和文件操作差不多1,首先加入头文件#include #include 2,opendirDIR *opendir(const char *name); //参数name 文件夹的名字如果打开成功的话返回一个dir结构的指针如果失败的话返回一个空指针翻译 2015-02-02 12:59:22 · 2743 阅读 · 0 评论 -
linux内核空间与用户空间信息交互方法
linux内核空间与用户空间信息交互方法本文作者:康华:计算机硕士,主要从事Linux操作系统内核、Linux技术标准、计算机安全、软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP Linux软件实验室。如果需要可以联系通过kanghua151@msn.com联系他。 摘要:在进行设备驱动程序,内核功能模块等系统级开发时,通常需要在内核转载 2014-12-25 08:53:08 · 1274 阅读 · 0 评论 -
协议数据打包
打包数据可以根据此模式进行修改自己需要的,协议打包原创 2014-12-25 09:10:31 · 1003 阅读 · 1 评论 -
linux下获取内存使用率及cpu使用率
linux下获取内存使用率及cpu使用率 简单易懂,直接获取原创 2015-01-05 09:45:58 · 966 阅读 · 1 评论 -
linux下socket连接下的心跳机制
心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。原创 2015-01-16 13:22:29 · 3112 阅读 · 0 评论 -
linux系统编程之进程(八):守护进程详解及创建,daemon()使用
一,守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器m转载 2015-01-05 10:46:41 · 519 阅读 · 0 评论 -
linux 系统调用system call
Linux内核模块编程指南 所以,如果我们想改变某个系统调用的工作方式,我们需要做的是编写自己的函数来实现它(通常通过添加一些我们自己的代码,然后调用原始的函数),然后更改sys_call_table指向函数的指针。因为我们可能被移除后,我们不想离开系统处于不稳定状态,重要的是cleanup_module表恢复到原来的状态。 下面是一个示例的源代码的内核模块。我们想“间谍”在一翻译 2015-02-13 14:37:51 · 2591 阅读 · 0 评论 -
网络大小端模式的转换
在网络传输过程中自定义协议,就显得比较重要了,比如size等,前提是你要跨平台。转换函数如下void convertToLittleEndian(unsigned int *data){ *data = ((*data & 0xff000000) >> 24) | ((*data & 0x00ff0000) >> 8) | ((*dat转载 2015-10-13 14:31:38 · 2146 阅读 · 0 评论 -
ping实现原理
ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者,这有点象潜水艇声纳系统中使用的发声装置。 例如,在Linux终端上执行ping localhost命令将会看到以下结果: PING localhost.localdomain (127.0.0.1)转载 2016-03-16 13:38:26 · 12512 阅读 · 1 评论 -
并发 并行 同步 异步 多线程的区别
1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步转载 2016-11-04 14:05:33 · 287 阅读 · 0 评论 -
文件I/O函数的封装 read write等
#include #include #include #include #include /* * 创建一个文件 * (1)创建成功 * (2)创建失败 -- 错误类型显示 */ #define PATHNAME "/hello.c" int openIO(){int fd;fd = open(PATHNAME, O_原创 2014-12-21 15:34:22 · 605 阅读 · 0 评论