- 博客(46)
- 收藏
- 关注
原创 文件共享方式
1、只读(1)一个进程中两次打开同一个文件,然后分别读取(2)经过实验验证,证明了结果是fd1和fd2分别读。(3)说明:linux系统的进程中不同fd对应的是不同的独立的文件管理表。2、只写(1)一个进程中2个打开同一个文件,得到fd1和fd2.然后看是分别写还是接续写?(2)默认情况下应该是:分别写(实验验证过的)3、加O_APPEND可以使两个fd续写(1)说明:关键的核心的东西是文件指针。分别写的内部原理就是2个fd拥有不同的文件指针,并且彼此只考虑自己的位移。但是O_APP
2021-11-12 16:44:09 623
原创 socket相关知识总结
https://blog.csdn.net/u012497906/article/details/46234675?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&utm_source=distribute.pc_relevant.none-task-blog-BlogComme...
2021-11-12 16:37:24 236
转载 centos7 安装dokuwiki
转载:https://blog.csdn.net/m0_46151734/article/details/104005609系统版本: CentOS Linux release 7.6(Core)1.下载并安装httpdDokuwiki 的安装需要apache服务和php环境的支持,所以要先安装httpd和php,第1、2步下载完,相关的依赖包都会一并下载yum -y install httpd2.下载并安装php①查看yum源中有没有php7.xyum search p.
2021-04-01 18:55:54 692
转载 nginx 父子进程通信 channel
转载地址:ttp://blog.csdn.net/benbendy1984/article/details/6023991版权声明:本文为博主原创文章,未经博主允许不得转载。nginx 中利用socketpair()函数,创建一对相互连接的socket,实现父子进程的通信。 下面分析下整个过程:一 创建 在子进程创建之前,需要创建这样一对连接: ngx_spawn_process函数(ngx_process.c中)//创建一对匿名的已经连接的套接字 if (...
2020-11-27 16:15:56 693
转载 哈希表之bkdrhash算法解析
BKDRHASH是一种字符哈希算法,像BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等,这些都是比较经典的,通过http://blog.csdn.net/wanglx_/article/details/40300363(字符串哈希函数)这篇文章,我们可知道,BKDRHash是比较好的一个获取哈...
2019-08-01 15:36:31 652
转载 特殊权限 SUID、SGID、Sticky
https://www.cnblogs.com/Q--T/p/7864795.htmlVersion:1.0 StartHTML:000000206 EndHTML:000081332 StartFragment:000002705 EndFragment:000081228 StartSelection:000002705 EndSelection:000081224 SourceURL:h...
2019-07-19 10:54:29 179
转载 socket与sock的联系
套接字究竟是什么如果你知道Linux系统中进程间通信的方式,就应该知道套接字也是其中一种。但套接字特别之处在于它不仅可以用来实现同一台主机上进程间的通信,还可以用来实现主机间的进程间的通信。通信的双方各自打开一个套接字,套接字之间通过通信链路相连。如果把两个套接字之间的‘连接’比喻成‘水管’,那么套接字就是‘水龙头’Unix有一句格言:everything is a file,即‘万物皆...
2019-06-21 17:56:43 4697
转载 RPM %config vs (noreplace)
RPM spec文件有个名为 %config 的宏,它可以标识配置文件, 这样在升级时用户对配置文件做过的修改就不会丢失。 没有它,用户千辛万苦修改过的配置文件会在升级过程中被覆盖。%config也可以写成%config(noreplace),不过网上关于它的说明却屈指可数。 下面是关于这两者的一些实验,都是在RedHat 9的RPM(rpm-4.2-0.69)上进行的, 其他版本...
2019-06-21 11:56:49 434
原创 shell中的${}
1.Shell中变量的原形:${var}但当你要显示变量值加随意的字符(我这里用_AA)时,就会出错这时应该用变量的原形:${var},即是加一个大括号来限定变量名称的范围[root@bogon sh]# aa='ajax'[root@bogon sh]# echo $aaajax[root@bogon sh]# echo $aa_AA[root@bogon sh]# e...
2019-06-04 10:29:45 11488
转载 shell中#*,##*,#*,##*,% *,%% *的含义及用法
介绍下Shell中的${}、##和%%使用范例,本文给出了不同情况下得到的结果。假设定义了一个变量为:代码如下: file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}:删掉最后一个 / 及其左边的字符串:...
2019-06-04 09:50:07 12256 1
转载 functions文件详细分析和说明
https://www.cnblogs.com/f-ck-need-u/p/7518142.htmletc/rc.d/init.d/functions几乎被/etc/rc.d/init.d/下所有的Sysv服务启动脚本加载,也是学习shell脚本时一个非常不错的材料,在其中使用了不少技巧。在该文件中提供了几个有用的函数:daemon:启动一个服务程序。启动前还检查进程是否已在运行。 ...
2019-06-04 09:41:57 1077
原创 ICMP类型报文分类。
ICMP类型报文总的来说分为2类:(1)差错报告报文类型值为3时:表示终点不可达类型值为4时:表示源点抑制类型值为5时:表示改变路由(Redirect)类型值为11时:表示超时类型值为12时:表示参数问题(2)询问报文类型值为8或者0时:表示回送(Echo)请求或应答类型值为13或14时:表示时间戳(Timestamp)请求或应答下面是几种不应发送ICMP差错报告的几种情况:...
2019-05-23 16:04:05 13813 1
转载 Linux 目录结构
当在使用Linux的时候,如果您通过ls–l/就会发现,在/下包涵很多的目录,比如etc、usr、var、bin......等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为树形结构。文件系统的是用来组织和排列文件存取的,所以她是可见的,在Linux中,我们可以通过ls...
2019-05-20 16:43:15 150
原创 浅析函数调用栈过程
先列出栈调用的基本原则栈是通过rsp(栈顶指针)、rbp(栈底指针)两个指针来标识的 对于栈上的访问都是通过栈底指针($rbp)的偏移来访问的 函数调用跳转时(callq)在新帧的栈首8Bytes存放上一帧的指令地址($rip的值) 通常函数的起始操作为push $rbp,将上帧的栈底地址8Bytes压入栈中 在保存完指令地址和栈底地址后,会进行一次sub xxx,$rsp,为当...
2019-04-30 13:03:45 366
原创 coredump_filter过滤dump file 抓取内存
coredump是抓取进程空间内的内存并保存到文件上,并不是所有内存都需要保存的,你可以通过设置/proc/$pid/coredump_filter参数过滤,只抓取部分内存。该参数是一个值,每个bit位都有对应的含义用来表示是否抓取这部分内:bit0: 私有匿名bit1: 共享匿名bit2: 有底层文件的私有映射bit3: 有底层文件共享映射bit4: ELF头bit5: ...
2019-04-30 10:52:06 758
转载 Linux内核的内存屏障
一方面,CPU由于采用指令流水线和超流水线技术,可能导致CPU虽然顺序取指令、但有可能会出现“乱序”执行的情况,当然,对于” a++;b = f(a);c = f”等存在依赖关系的指令,CPU则会在“b= f(a)”执行阶段之前被阻塞;另一方面,编译器也有可能将依赖关系很近“人为地”拉开距离以防止阻塞情况的发生,从而导致编译器乱序,如“a++ ;c = f;b = f(a)”。一个CPU对指令...
2019-04-22 19:54:22 141
转载 core dump简介
http://blog.chinaunix.net/uid-20726500-id-5758724.htmlcore dump就是在进程crash时把包括内存在内的现场保留下来,以备故障分析。 但有时候,进程crash了却没有输出core,因为有一些因素会影响输出还是不输出core文件。 常见的一个coredump开关是ulimit -c,它限制允许输出的coredump文件的最大size,如...
2019-04-22 19:50:15 598
转载 Logrotate管理日志
Logrotate是一个日志文件管理工具。用来把旧文件轮转、压缩、删除,并且创建新的日志文件。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理,一般都是通过cron计划任务来完成的。文件位置默认状态文件在/var/lib/logrotate.status 默认配置文件是/etc/logrotate.conf运行原理Logrotate是基于CRON来运行的,其脚本在/et...
2019-04-02 14:01:01 287
转载 Linux下哪些文件在消耗我们的Cache?
https://blog.csdn.net/rapheler/article/details/52528577我们很容易就用free命令看到系统的cache使用量,但是你知道是哪些程序的文件在消耗cache吗?虽然cache在严格意义上也是可以当做free的内存使用的,也可以通过 echo 3>/proc/sys/vm/drop_caches来主动释放,但是你真的确定运行这条命之后,ca...
2019-03-28 10:52:04 688
转载 Linux /proc/$pid部分内容详解
https://www.cnblogs.com/likui360/p/6181927.htmlauxv/proc/[pid]/auxv包含传递给进程的ELF解释器信息,格式是每一项都是一个unsigned long长度的ID加上一个unsigned long长度的值。最后一项以连续的两个0x00开头。举例如下:# hexdump -x /proc/2948/auxv0000000 ...
2019-03-27 16:30:28 2938
转载 mmap 与 cache 的回收
http://luodw.cc/2016/08/13/linux-cache/进程的内存申请与分配我们在终端启动一个程序时,终端进程调用exec函数将可执行文件载入内存,此时代码段,数据段,bbs段,stack段都通过mmap函数映射到内存空间,堆则要根据是否有在堆上申请内存来决定是否映射;exec执行之后,此时并未真正开始执行进程,而是将cpu控制权交给了动态链接库装载器,由它来将该进程...
2019-03-27 15:42:02 1566
转载 free命令中cached和buffers的区别
一、命令 1 2 3 4 5 [root@localhost ~]# free -m total usedfreeshared buffers cached Mem: 7869 7651 218...
2019-03-26 17:43:28 137
转载 linux 进程地址空间
https://www.cnblogs.com/wuchanming/p/4339770.html我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内...
2019-03-26 16:00:47 151
原创 tailq
首先看一下这个TAILQ链表的结构,TAILQ链表包括两个部分,一个叫HEAD的头部,另外一个就是ENTRY实体部分;下面是两部分的定义和一些典型的操作宏,分析可得出tailq 各个字段的含义,如下图所示。#define TAILQ_HEAD(name, type) \struct name { \ struct type *tqh_first; /* first...
2019-03-22 18:51:54 299
转载 mutex VS spin
自旋锁(Spin lock)自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是 否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。其作用是为了解决某项资源的互斥使用。因为自旋锁不会引起调用者睡眠,所以自旋锁的效率远 高于互斥锁。虽然它的效率比互斥锁高,但是它也有些不足之处:1、自旋锁一直占用CPU,他在未获得锁...
2019-03-14 15:36:45 165
转载 libtool 工具介绍 ---- la lo
o: 编译的目标文件a: 静态库,其实就是把若干o文件打了个包so: 动态链接库(共享库)lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息补充:libtool1 libtool的工作原理libtool 是一个通用库支持脚本,将使用动态库的复杂性隐藏在统一、可移...
2019-03-14 10:25:56 1047
原创 gcc 编译相关CFLAGS LDFLAGS LIB
CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。CFLAGS: 指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该...
2019-03-14 10:04:59 1910
转载 Linux内核中的RCU机制
http://blog.chinaunix.net/uid-23769728-id-3080134.htmlRCU的设计思想比较明确,通过新老指针替换的方式来实现免锁方式的共享保护。但是具体到代码的层面,理解起来多少还是会有些困难。在《深入Linux设备驱动程序内核机制》第4章中,已经非常明确地叙述了RCU背后所遵循的规则,这些规则是从一个比较高的视角来看,因为我觉得过多的代码分析反而容易让读...
2019-03-13 14:59:51 346
转载 比特转发率和包转发率的关系?为什么以太网最短是64字节?
比特转发率和包转发率的关系?为什么以太网最短是64字节? 一、bps和pps如何换算? 二、为什么以太网最短是64字节? 三、IPv6 的最短包长是多少? 四、Spirent上为什么设置IPv6最短长度为76字节,Spirent仪器上能否发送64字节的IPv6报文? 五、IPv6 包的pps如何计算比价合理?一、bps和pps如何换算? 比特转发率:bps(bits per sec...
2019-02-15 17:38:24 666
原创 理解获取结构体内偏移值 (size_t)&(((s *)0)->m) 原理
#define offsetof(s,m) (size_t)&(((s *)0)->m)((s *)0):强制转化成数据结构指针,并使其指向地址0;((s *)0)->m:使该指针指向成员m&(((s *)0)->m):获取该成员m的地址(size_t)&(((s *)0)->m):转化这个地址为合适的类型 ANSI C标准允许任何...
2019-01-07 14:22:09 919
原创 skb_clone 与skb_copy
skb_copy是一个深拷贝,skb_clone只是一个浅拷贝1、skb_clone()Skb_clone()函数只是复制sk_buff结构,并不复制skb的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的skb描述符的cloned值都会被置1,clone的skb描述符的users值置1,同时数据缓冲区的引用计数dataref增加1...
2018-12-25 10:05:26 3061
转载 dpdk内存管理--------初始化
https://www.cnblogs.com/MerlinJ/p/4074391.htmlDPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续、属于哪个Socket等,有效的组织起来,为后续管理提供便利。eal_hugepage_info_init()主要是获取配置好的Hugetlbfs的相关信息,并将其保存在struct inte...
2018-11-25 14:26:34 209
转载 git diff 四种比较方式
https://blog.csdn.net/asheandwine/article/details/78982919工作场景在用git进行版本控制的时候,通常会有这样的需求: 1.我想知道我的工作目录中都发生了那些变化,以辅助我的commit操作。 2.当要真正进行提交时,我需要清楚将要提交的内容和版本库的内容有哪些不同,这样的提交是正确的吗。 3.在线上代码出现问题的时,明确的知道原...
2018-11-08 10:34:55 1723
原创 SecureCRT 配色方案
效果图:设置背景颜色 1、选项(Options)==》会话选项(Sessions options)==》终端(Terminal)==》仿真(Emulation) 2、在 终端(T) 下拉列表中选择Linux,勾选 ANSI颜色(A) 3、选项(Options)==》全局选项(Global options)==》终端(Terminal)==》外观(Apperan...
2018-10-27 16:30:05 1261 1
转载 GCC 告警调试优化选项详细说明
参考:http://www.rowleydownload.co.uk/arm/documentation/gnu/gcc/Warning-Options.htmlgcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 预处理器cpp2.将预处理后的文件不转换成汇编语言,生成文件....
2018-10-18 19:23:18 2815
转载 git使用详解--图文实例
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网...
2018-10-10 18:54:16 218
原创 gcc 编译命令选项$@ $^ $<
一些常见的自动化变量说明如下:(1) $@ ——目标文件的名称;(2) $^ ——所有的依赖文件,以空格分开,不包含重复的依赖文件;(3) $< ——第一个依赖文件的名称。(4) $? 表示比目标还要新的依赖文件列表按照 Makefile 规则规规矩矩的写:main: main.o hello.o hi.o gcc -o main main.o hell...
2018-10-10 14:59:59 4262
原创 automake等自动生成makefile 的相关有用文档
automake等自动生成makefile 的相关有用文档Automake 使用手册 https://blog.csdn.net/wangxiaoqin00007/article/details/35225783图解acloal autoheader automakehttps://my.oschina.net/qihh/blog/66113makefile.am 与config...
2018-10-08 18:51:54 194
原创 常见DDOS攻击原理
1. winnuke攻击winnuke是利用NetBIOS协议中一个OOB(Out of Band)的漏洞,也就是所谓的带外数据漏洞而进行的,它的原理是通过TCP/IP协议传递一个Urgent紧急数据包到计算机的137、138或139端口,当win95/NT收到这个数据包之后就会瞬间死机或蓝屏,不重新启动计算机就无法继续使用TCP/IP协议来访问网络。 带外数据OOB是指TCP连接中发送的一种特殊...
2018-07-06 10:32:14 5630
转载 DNS协议详解及报文格式分析
DNS协议详解及报文格式分析文章转载链接-----------------点击打开链接目录一. DNS协议理论知识1.1. 域名结构1.2. 域名服务器1.3. 域名解析过程二. DNS协议报文格式2.1 头部2.2 正文三. Wireshark分析DNS协议3.1 请求报文3.2 响应报文解BUG的过程中碰到了DNS相关的内容,折腾网站和域名邮箱时也对DNS做了一些配置,发现对一些细节有点记不清...
2018-07-06 09:16:53 532
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人