自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 将博客搬至CSDN

将博客搬至CSDN文章地址:https://blog.csdn.net/as3522将个人博客搬至csdn,主要是一些个人的学习笔记吧,大多数内容都是转载的,算是个人学习的一些记录,没多少原创的文章。那么有关文章,既然是抄袭过来的,一般底部都会写明出处...

2019-10-19 11:13:05 252

转载 oled学习

深入学习Arduino u8g2 OLED库,一篇就够_单片机菜鸟哥的博客-CSDN博客_u8g2

2021-12-30 23:39:09 177

原创 writev遇到非阻塞IO

这几天在处理一些协议上面的东西,还算简单吧,封装一些字段然后发出去。问题就出现在了发出去这个地方,发的地方使用的是writev,writev可以发送多个分散的,不连续的内存里面的东西。比方说,我封装了http的头部,放到了一个httpHeadBuf里面,然后又组装了body,放到了sendBuf里面,在组包的时候,各自组包互不干涉。然后发送的时候,使用writev进行发送,writev以顺序...

2019-08-03 19:32:26 11937

原创 PF_PACKET

PF_PACKET瞅代码的时候,看到一个很奇特的socket,sock=socket(PF_PACKET, SOCK_RAW, htons(0x8888))那什么是PF_PACKET?我在网上翻了一下,找到了一片不错的文章,详细sock_raw(注意一定要在root下使用)原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对于监听网络的流量和分析是很有作用的.一共可以有3种方式创...

2019-07-28 19:09:36 6937

原创 SO_BINDTODEVICE

man socket(7)里对该选项的描述:SO_BINDTODEVICE Bind this socket to a particular device like “eth0”, as speci‐ fied in the passed interface name. If the name is an empty string or t...

2019-07-28 19:07:45 1143

原创 Socket-filter

看代码的时候突然遇到了一个很奇怪的结构体struct sock_filter当时就是一脸茫然,这是什么?通过百度大概了解了一下皮毛,这个是过滤器,可以配置规则来过滤一些报文,只提取自己感兴趣的报文。比较详细的介绍可以参考Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)本文大概简单介绍一下。设置BPF过滤器是通过setsockopt调用来完成的,格式...

2019-07-28 19:06:46 3302

原创 sendto和recvfrom

sendto头文件#include < sys/types.h >#include < sys/socket.h >定义函数int sendto ( int s , const void msg, int len, unsigned int flags, conststruct sockaddr to ...

2019-07-28 19:05:34 249

原创 memalign-calloc-malloc-realloc-free-alloca

memalign 在GNU系统中,malloc或realloc返回的内存块地址都是8的倍数(如果是64位系统,则为16的倍数)。如果你需要更大的粒度,请使用memalign或valloc。这些函数在头文件“stdlib.h”中声明。​ 在GNU库中,可以使用函数free释放memalign和valloc返回的内存块。但无法在B...

2019-07-28 19:04:17 505

原创 网络编程设置TTL

最近遇到一个问题,领导让我查一下关于多播的TTL配置的问题,我也是看了diam之后才知道的原来TTL可以通过编程来实现,说起来网络编程能力欠佳啊TTLTTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段.在IPv4包头中TTL是一个8 bit字段,它位于IPv4包的第9个字节。如下图所示,每一行...

2019-07-28 19:00:55 2311

原创 开源协议GPL

最近添加了一个功能,需要用到开源库,然后是GPLv2。由于GPL的传染性,所以后面就直接拉了一个进程来添加这个新功能。所以相关的协议还是要去了解的。GPL 协议即通用性公开许可证(General Public License,简称GPL)。GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向...

2019-07-28 18:59:52 3121

转载 linux本地套接字

Linux网络编程——Unix本地套接字概述  今天给大家讲解网络编程中的一个内容——Unix 本地套接字。  发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并且这种网络 socket 同样支持单台主机上的进程间通信,当然这样做的话,仍然需要 IP 地址和端口号(通过 loopback 地址 127.0...

2019-07-01 11:14:51 437

原创 linux-unlink

Linux下unlink函数的使用一、头文件#include<unistd.h>二、函数原型int unlink(const char *pathname);三、函数介绍unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。注意:执行unlink()函数并不一定会真正的删除文件,...

2019-07-01 11:13:05 245

原创 popen

popen()可以执行shell命令,并读取此命令的返回值;  popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。可以通过这个管道执行标准输入输出操作。这个管道必须由pclose()函数关闭,必须由pclose()函数关闭,必须由pclose()函数关闭,而不是fclose()函数(若使用fclose则会产生僵尸进程)。pclos...

2019-05-15 15:13:14 159

原创 sqlite3 pragma

原文PRAGMA语句是SQLITE数据的SQL扩展,是它独有的特性,主要用于修改SQLITE库或者内数据查询的操作。它采用与SELECT、INSERT等语句一样的形式来发出请求,但也有几个重要的不同:特定的PRAGMA语句可能被移走,新的PRAGMA语句可能在新的版本中添加。因此,后向兼容无法保证。 未知的PRAGMA命令不会有错误消息出现,它只是简单的忽略。 有些PRAGMA只在S...

2019-05-15 15:11:39 360

原创 哈佛和冯诺依曼架构

哈佛结构哈佛(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程...

2019-05-15 15:09:19 357

原创 MarkDown语法

https://blog.csdn.net/qcx321/article/details/53780672markdown语法实例[TOC]1 强调星号与下划线都可以,单是斜体,双是粗体,符号可跨行,符号可加空格 **一个人来到田纳西**__毫无疑问__*我做的馅饼是全天下*_最好吃的_ 一个人来到田纳西毫无疑问我做的馅饼是全天下最好...

2019-05-15 14:31:02 135

原创 Linux_strace

strace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。在Linux系统中,用户程序运行在一个沙箱(sandbox)里,用户进程不能直接访问计算机硬件设备。当进程需要访问硬件设备(如读取磁盘文件或接收网络数据等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。s...

2019-05-15 14:30:04 156

原创 lsof命令

Linux lsof命令详解简介lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如TC和UDP等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述...

2019-05-14 21:25:22 175

原创 Windows7上开启ftp服务器功能

Windows7上开启ftp服务器功能https://www.cnblogs.com/liangxuru/p/6148212.html

2019-04-13 14:43:10 120

原创 深入理解strncpy这个函数

https://blog.csdn.net/weibo1230123/article/details/80382614

2019-04-13 14:42:11 145

原创 ioctl()分析——从用户空间到设备驱动

ioctl()分析——从用户空间到设备驱动https://blog.csdn.net/zifehng/article/details/59576539

2019-04-13 14:40:52 100

原创 字母对应的ASCII码和CTRL加字母的

对于字母的ASCII码来说。网上已经罗列出来了,这是很容易就获取的,然后对于ctrl+字母的以及shift+字母的却有点小难了。最近在写脚本的时候,需要用到一些组合键,但是苦于不知道这些组合键对应的键盘码,就很尴尬CTRL+字母 ASCII码1,2,3…分别依次对应键盘按键的Ctrl+A键,Ctrl+B键,Ctrl+C键,…Ct...

2019-04-13 14:22:22 1800

原创 串口清空输入输出缓存

Linux串口编程——清空输入输出缓存背景在我们的工作中,串口是一种比较常用的数据传输方式。在某些应用场景下,当程序启动并打开串口后,我们不希望读出串口打开之前的输入缓存数据(即内核驱动已接收但是并未被应用层读出的数据),因此需要对输入缓存数据进行清空(刷清、丢弃)操作。下面以Linux系统上串口编程为例进行说明:测试环境硬件环境:PC操作系统:Ubuntu 14.04虚拟机...

2019-04-13 14:20:29 1439 2

原创 linux编程之select

Linux编程之selectselect系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。select 机制的优势为什么会出现select模型?先看一下下面的这句代码:int iResult = recv(s, buffer,1024);这是用来接收数据的,在默认的阻塞模式下的套接字里,recv会阻塞在那里,直到套接字连接上有...

2019-04-13 14:15:11 90

原创 select-poll-epoll的简介和区别

select、poll、epoll简介epoll跟select都能提供多路I/O复用的解决方案。在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现select:select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺...

2019-04-13 14:14:21 84

原创 Struct tm

时间操作(struct tm、time_t)求指定日期 前n天的日期#ifndef _TM_DEFINEDstruct tm {int tm_sec; /* 秒–取值区间为[0,59] */int tm_min; /* 分 - 取值区间为[0,59] */int tm_hour; /* 时 - 取值区间为[0,23] */int tm_mday; /* 一个月中的日期 - 取值区...

2019-04-13 14:13:28 307

原创 谷歌浏览器安装插件

忘记了是由于什么安全的原因,现在chrome无法直接安装插件了首先下载浏览器插件crx文件,鼠标右键修改文件名后缀由crx改为rar解压成文件夹,打开浏览器,依次点击浏览器的右上角,更多工具,扩展程序,打开右上角的开发者模式开关。点击加载已解压的扩展程序,选择之前解压的扩展程序目录,点击确认,可以看到对应的扩展程序已经安装好了。...

2019-04-13 14:09:23 83

原创 makefile '@' '$' '1828' '-' '-n ' ' $^'使用小结

编译代码时,会进程接触makefile,会涉及到一些符号,由于不明白有些意思经常出现问题,在此归纳一下。‘@’ 符号的使用通常makefile会将其执行的命令行在执行前输出到屏幕上。如果将‘@’添加到命令行前,这个命令将不被make回显出来。例如:@echo –compiling module—-; // 屏幕输出 –compiling module—-echo –compiling ...

2019-04-13 14:07:04 168

原创 Hexo不显示图片,不需要插件,超简单

当使用Hexo创建文件搭建博客的时候,就会遇到图片插图,以及插入的图片无法显示的问题,差不多网上大多数的解决方案就是第一种(但我本人没使用这个方案)第一种1.找到Hexo下的_config.yml里的post_asset_folder,把这个选项从false改成true2.在Hexo目录下打开Git Brsh,执行一个下载上传图片插件的命令npm install hexo-asset...

2019-02-20 21:02:42 1231 5

原创 vim快速查找

vim有强大的字符串查找功能。 我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ? 加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入 /super 或者 ?super, 两者的区别是前者是从上往下搜索,后者是从下往上搜索。 那么如果我想搜索本行中某个单词,并且这个单词很长的...

2019-02-20 19:40:46 135

原创 container_of图文分析

container of()函数分析简介Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。Container_of的定义如下:#define container_of(ptr, type, member) ({ \ const typeo...

2019-02-20 19:39:45 114

原创 同步内核缓冲区 sync,fsync和fdatasync函数

同步内核缓冲区1.缓冲区简单介绍人生三大错觉之中的一个:在调用函数write()时,我们觉得该函数一旦返回,数据便已经写到了文件里.可是这样的概念仅仅是宏观上的.实际上。操作系统实现某些文件I/O时(如磁盘文件)。为了保证I/O的效率,在内核一般会用到一片专门的区域(内存或独立的I/O地址空间)作为I/O数据缓冲区.它用在输入输出设备和CPU之间,用来缓存数据,使得低速的设备和快速的CP...

2019-02-20 19:37:58 265

原创 算术移位逻辑移位

unsigned int i = 8;int main(){ i = i<<3;//输出结果i = 64}请问:上面的变量i是采用逻辑移位还是算术移位呢?逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题。算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变。逻辑移位逻辑移位是指...

2019-02-20 19:31:46 402

原创 linux memalign,valloc函数

在GNU系统中,malloc或realloc返回的内存块地址都是8的倍数(如果是64位系统,则为16的倍数)。如果你需要更大的粒度,请使用memalign或valloc。这些函数在头文件“stdlib.h”中声明。​ 在GNU库中,可以使用函数free释放memalign和valloc返回的内存块。但无法在BSD系统中使用...

2019-02-20 19:30:53 244

原创 线程属性-pthread_attr_init

我们一般创建线程是这样pthread_t tid;pthread_create(&tid, NULL, func, NULL);第二个参数是线程属性设置,一般设置为了NULL,但是可以通过系统API进一步设置第二个参数,细化创建的线程的属性。大致步骤为:pthread_attr_t attr;pthread_attr_init(&attr);pthre...

2019-02-20 19:29:40 431

原创 AF_INET和PE_INET区别

在写网络程序的时候,建立TCP socket:sock = socket(PF_INET, SOCK_STREAM, 0);然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构,其中指定address family时一般设置为AF_INET,即使用IP。相关头文件中的定义:AF = Address Family​ PF = Protocol Family​ ==AF...

2019-02-20 19:26:24 522

原创 va_list,va_start,va_arg,va_end使用说明

在ANSI C中,这些宏的定义位于stdarg.h中,典型的实现如下:typedef char *va_list;va_start宏,获取可变参数列表的第一个参数的地址(list是类型为va_list的指针,param1是可变参数最左边的参数):#define va_start(list,param1) ( list = (va_list)&param1+ sizeof(pa...

2019-02-20 19:22:23 81

原创 source_insight的查找功能

source insight的查找功能sourceinsight是一款很好的代码阅读编辑工具,方便对project管理,方便程序的阅读和编辑。查找功能使用十分频繁,选项较多,与其它软件的查找功能也类似,下面对英文版的查找功能,做简单说明:查找参数:whole wordsonly : 全字匹配查找cas...

2019-02-20 19:19:01 154

原创 大小端和结构体位域

大小端和结构体位域大小端什么是大小端Big-Endian和Little-Endian的定义如下:1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:1)大端模式:低地址 ———...

2019-01-30 17:07:32 1081 1

原创 svn基本操作

svn常用操作命令原文地址检出 svn checkout http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名svn checkout svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名# 例子:svn co svn://localhost/测试工具 /home/testtools ...

2019-01-30 17:05:54 101

空空如也

空空如也

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

TA关注的人

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