Linux
文章平均质量分 75
HideInTime
这个作者很懒,什么都没留下…
展开
-
GCC动态链接库规范和问题
对于动态链接库,实际的符号定位是在运行期进行的,在编译.so的时候,如果没有把它需要的库和他一起进行联编,比如libx.so 需要使用uldict, 但是忘记在编译libx.so的时候加上-luldict的话,在编译libx.so的时候不会报错,因为这个时候libx.so被认为是一个库,它里面存在一些不知道具体实现的符号是合法的,是可以在运行期指定或者编译另外的二进制程序的时候指定。(2) 连接库参数的顺序不对。(4) /lib 和 /usr/lib (64位下是/lib64和/usr/lib64)转载 2023-02-14 15:04:09 · 541 阅读 · 0 评论 -
TCP连接状态
一、连接状态LISTEN:服务器在等待进入呼叫SYN_RECV:一个连接请求已经到达,等待确认SYN_SENT:应用已经开始,打开一个连接ESTABLISHED:正常数据传输状态FIN_WAIT1:应用说它已经完成FIN_WAIT2:另一边已同意释放ITMED_WAIT:等待所有分组死掉CLOSING:两边同时尝试关闭TIME_WAIT:表示处理完毕,等待超时结束的请求数。LAST_ACK:等待所有分组死掉CLOSED:无连接是活动的或正在进行二、TCP状态转移要点 TCP协议规定,转载 2022-12-05 09:58:45 · 1654 阅读 · 0 评论 -
深入解析linux动态链接
动态连接是现在操作系统中程序的默认使用方式,非常重要。但是搞懂动态连接你必须真正掌握静态连接。不然你是看不明白的。转载 2022-12-01 15:06:24 · 646 阅读 · 0 评论 -
基础进程通信方式
1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。int fd[2];//0读出,1写入pipe(fd);int pid = fork();if(pid==0){ close(fd[1]); read(fd[0], buf, len);}else if(pid>0){ close(fd[0]); write(fd[1], buf, len);}2.高级原创 2022-05-13 10:23:32 · 158 阅读 · 0 评论 -
linux磁盘空间扩容方案
方案1:临时挂载扩容(只可使用指定目录存储)1.fdisk -l2.fdisk /dev/xxxx new分区,定义编号1,分区大小默认,w保存3.mkfs -t ext3 /dev/xxxx4.mount /dev/sdb1 /要挂载的目录5.开机自动挂载vi /etc/fstab添加/dev/xxxx/要挂载的目录 ext3 defaults 01方案2:永久扩容到原存储结构主要命令df,fdisk,du物理卷操作:pvdisplay,pvcr...原创 2021-09-15 19:27:11 · 2927 阅读 · 0 评论 -
linux的so动态库可执行(节.interp)
代码如下mytest.c#include<stdio.h>#include<stdlib.h>//在elf格式中加入一个节.interp 此节含有 ELF 程序解析器的路径名//如果动态库不包括此节就不能被执行//注意你的连接器地址不一定是/lib64/ld-linux-x86-64.so.2这个路径哈 自己查找下你环境中的连接器地址const char ldpath[] __attribute__ ((section (".interp"))) = "/li...原创 2021-08-17 11:13:16 · 883 阅读 · 0 评论 -
添加用户并赋予 root管理员权限
用centos时,root用户一般都是超级管理员使用的,一般不轻易给别人,但是有时候同事安装软件时需要root账号,又不得不给,只能重新建一个用户,并赋予管理员权限。下面介绍创建用户并赋予管理员权限的方法步骤:1.新建用户,这里新建一个 summer 的用户adduser summer2.设置新用户密码passwd summer3.将sudoers文件的权限修改成可编辑chmod -v u+w /etc/sudoers4.使用vim编辑sudoers文件vim /..原创 2021-08-11 14:53:05 · 1164 阅读 · 0 评论 -
socket收包缓冲区研究
ioctl获取FIONREAD参数 raw_socket获取为原始分片包接收第一个包大小(icmp60,udp分片1514) udp_socket获取为协议栈组装包大小(udp发送方60k及为60k,上限为udplen(65535)) tcp_socket获取为协议栈组装包大小(tcp发送方第一个包长度,初始协商堆积上限tcp窗口基数16位满(65535),阻塞发包方,后滑动窗口大小可协商调整Window size scaling factor(初始握手窗口基数)* Window s...原创 2021-08-05 18:21:00 · 400 阅读 · 0 评论 -
linux网卡处理数据包过程
网卡的 Ring Buffer 详解1. 网卡处理数据包流程网卡处理网络数据流程图:上图中虚线步骤的解释:DMA 将 NIC 接收的数据包逐个写入 sk_buff ,一个数据包可能占用多个 sk_buff , sk_buff 读写顺序遵循FIFO(先入先出)原则。DMA 读完数据之后,NIC 会通过 NIC Interrupt Handler 触发 IRQ (中断请求)。NIC driver 注册 poll 函数。poll 函数对数据进行检查,例如将几个 sk_buff 合并.原创 2021-08-02 16:11:19 · 1220 阅读 · 0 评论 -
Linux的共享内存
一、shm方式和mmap方式区分 二者本质上是类似的,mmap可以看到文件的实体,而 shmget 对应的文件在交换分区上的 shm 文件系统内,无法直接 cat 查看 安全性:mmap 方式对应的真实文件,如果用户有权限即可查看,甚至删除 shmget 方式其实也一样,好了一层皮罢了(ipcrm -m …) 一致性:mmap 方式下各进程映射文件的相同部分可以共享内存 shmget 时各个进程共享同一片内存区...原创 2021-02-19 11:55:11 · 740 阅读 · 0 评论 -
配置常用yum源
yum repolist all查看加载哪些源采用命名方式选用部分源国内yum源的安装(163,阿里云,epel)----阿里云镜像源1、备份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2、下载新的CentOS-Base.repo到/etc/yum.repos.d/CentOS 5wget -O /etc/yum.repos.d/CentOS-Base..原创 2021-01-29 16:07:00 · 404 阅读 · 0 评论 -
setsockopt常用设置
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAI原创 2021-01-28 11:40:36 · 441 阅读 · 1 评论 -
Centos6阿里源
[base]name=CentOS-6.10 - Base - mirrors.aliyun.comfailovermethod=prioritybaseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/gpgcheck=1gpgkey=http://mirrors.aliyun.com/centos-vault/RPM-GPG-KEY-CentOS-6#released updates [updates]name=.原创 2020-12-25 12:00:02 · 378 阅读 · 0 评论 -
Linux性能监控工具集sysstat
sariostatsa1sa2sadfmpstatsadcsysstatsysstat 工具简介sysstat 是 Linux 系统中的常用工具包。它的主要用途是观察服务负载,比如CPU和内存的占用率、网络的使用率以及磁盘写入和读取速度等。sysstat 工具包中包含两类工具:即时查看工具:iostat、mpstat、sar累计统计工具:sar也就是说,sar 具有这两种功能。因此,sar 是 sysstat 中的核心工具。为了实现 sar 的累计统计,系统必须周期地记.原创 2020-12-25 11:51:15 · 351 阅读 · 0 评论 -
select、poll、epoll、kqueue、iocp(windows)
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,但是它没有最大连接数的限制,原因是它是基于链表来存.转载 2020-12-07 10:32:38 · 1367 阅读 · 0 评论 -
linux的socket连接限制
Linux下解决高并发socket最大连接数限制,tcp默认1024个连接 linux作为服务器系统,当socket运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到1000左右时,再也不能建立tcp连接,最总上网搜索,linux系统默认ulimit为1024个访问用户最多可开启的程序数目。一般一个端口的最高连接为2的16次方65535第一步,修改/etc/security/li.原创 2020-12-02 17:38:56 · 934 阅读 · 0 评论 -
socket编程基础
本文的主要内容如下: 1、网络中进程之间如何通信? 2、Socket是什么? 3、socket的基本操作 3.1、socket()函数 3.2、bind()函数 3.3、listen()、connect()函数 3.4、accept()函数 3.5、read()、write()函数等 3.6、close()函数 4、socket中TCP的三次握手建立连接详解 5、so原创 2020-12-01 15:14:12 · 196 阅读 · 0 评论 -
【已解决】虚拟机异常关闭导致重启卡死问题
场景:虚拟机内部运行忙状态、系统错误状态、状态保存阶段、系统中断等情况下 对虚拟机采取强制关机(强制关闭虚拟机进程、服务、重启主机操作系统等) 导致重启虚拟机停留在开机黑屏界面,无响应,vmvare为例: 加载图标停留在磁盘读取,其余项全为灰 虚拟机安装目录下日志文件记录VIX_E_TOOLS_NOT_RUNNING,虚拟机工具无法加载到系统,推测和虚拟机的保 ...原创 2020-09-24 12:05:44 · 4465 阅读 · 1 评论 -
fuzzing工具之AFL的安装与使用
fuzzing工具之AFL的安装与使用AFL介绍:AFL即American Fuzzy Lop是当今使用最广泛的fuzzer,这个工具在程序执行前对程序源码进行插桩(instrumentation),以便在程序执行过程中实时获取程序的执行情况。AFL用遗传算法对程序的输入进行变异,用边覆盖(edge converage)来测试fuzzing的性能。在执行过程中,AFL向被测程序中输入input,然后获取程序的覆盖率,将覆盖率大的input保留下来进行变异,然后在下一轮测试中向被测程序中输出这些变转载 2020-09-03 15:44:50 · 580 阅读 · 0 评论 -
linux下把进程/线程绑定到特定cpu核上运行
概述现在大家使用的基本上都是多核cpu,一般是4核的。平时应用程序在运行时都是由操作系统管理的。操作系统对应用进程进行调度,使其在不同的核上轮番运行。对于普通的应用,操作系统的默认调度机制是没有问题的。但是,当某个进程需要较高的运行效率时,就有必要考虑将其绑定到单独的核上运行,以减小由于在不同的核上调度造成的开销。把某个进程/线程绑定到特定的cpu核上后,该进程就会一直在此核上运行,不会再被操作系统调度到其他核上。但绑定的这个核上还是可能会被调度运行其他应用程序的。操作系统对多核cpu的调度转载 2020-09-02 11:03:24 · 282 阅读 · 0 评论 -
GCC和C99标准中inline
GCC和C99标准中inline使用上的不同之处本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任原创 2020-08-25 17:50:47 · 738 阅读 · 1 评论 -
netstat的tcp4/6
netstat 查看监听的服务端口时,却只显示了 tcp6 的监控, 但是服务明明是可以通过 tcp4 的 ipv4 地址访问的,那为什么没有显示 tcp4 的监听呢?以 sshd 监听的 22 端口为例:# netstat -tlnp | grep :22tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1444/sshdtcp6 0 0 :::22 ...原创 2020-08-18 17:48:22 · 3309 阅读 · 0 评论 -
linux项目文件编译
linux项目文件编译原创 2020-08-18 16:33:22 · 163 阅读 · 0 评论 -
vs的linux开发
https://www.cnblogs.com/apocelipes/p/10899484.html通常,当我们开发Linux程序时有两种方案:在Linux上直接编写程序并进行运行测试和调试 在Windows或Mac OS X上借助工具进行远程开发虽然我自己是在Linux环境上直接进行开发的,但也有许多的人是在Windows环境上从事开发工作的,如果离开自己熟悉的系统到陌生的环境上也许会影响到工作效率。因此今天我们就来看下如何在Windows上使用Visual Studio 2019进行Li转载 2020-07-28 19:01:45 · 1247 阅读 · 1 评论 -
Linux中的各种锁及其基本原理
Linux中的各种锁及其基本原理1.概述通过本文将了解到如下内容:Linux系统的并行性特征 互斥和同步机制 Linux中常用锁的基本特性 互斥锁和条件变量2.Linux的并行性特征Linux作为典型的多用户、多任务、抢占式内核调度的操作系统,为了提高并行处理能力,无论在内核层面还是在用户层面都需要特殊的机制来确保任务的正确性和系统的稳定运行,就如同一个国家需要各种法律条款来约束每个公民的行为,才能有条不紊地运转。在内核层面涉及到各种软硬件中断、进线程睡眠、抢占式内核调度、多处理转载 2020-06-24 10:31:01 · 420 阅读 · 0 评论 -
gcc多版本安装
1、安装SCL源yum install centos-release-scl-rh2、安装GCC/GCC-C++yum install devtoolset-7-gcc devtoolset-7-gcc-c++yum install devtoolset-8-gcc devtoolset-8-gcc-c++yum install devtoolset-9-gcc devtool...原创 2020-05-07 11:44:54 · 3285 阅读 · 0 评论 -
flock、lockf和fnctl区别
首先flock和fcntl是系统调用,而lockf是库函数。lockf实际上是fcntl的封装,所以lockf和fcntl的底层实现是一样的,对文件加锁的效果也是一样的。后面分析不同点时大多数情况是将fcntl和lockf放在一起的。下面首先看每个函数的使用,从使用的方式和效果来看各个函数的区别。1. flock函数原型int flock(int fd, int operation)...转载 2020-05-06 10:54:10 · 852 阅读 · 1 评论 -
linux下c获取网卡信息
在Linux下开发网络程序时,经常会遇到需要取本地网络接口名、IP、广播地址、子网掩码或者MAC地址等信息的需求,最常见的办法是配合宏SIOCGIFHWADDR、SIOCGIFADDR、SIOCGIFBRDADDR与SIOCGIFNETMASK作为参数调用函数ioctl分别获得MAC地址、IP地址、广播地址与子网掩码来实现。一次性获取此类信息的C语言代码实现如下。 1 #inc...转载 2020-04-30 16:21:42 · 1142 阅读 · 0 评论 -
gdb调试备忘
gdb progfile指令r:运行bt:查看当前地址堆栈1. 普通断点根据代码行数设置断点是最常见的一种方式,在debug程序运行前就可以进行断点的配置。如:(gdb) b src/main.cpp:127当程序执行到main.cpp文件的第127行时就会出发断点。2. 条件断点顾名思义,这种断点是当满足一定条件时才会触发,比较适合进行异常排查。设置方式(...原创 2020-04-26 17:21:26 · 130 阅读 · 0 评论 -
ioctl
一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, ind cmd, …); 其中fd是用户程序打开设备时使用open函数返回的文件标示符,cmd是用户程序对设备的控制命令,至于后面的省略号,那是...原创 2020-04-14 14:10:36 · 214 阅读 · 0 评论 -
select/poll/epoll
(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...原创 2020-04-14 11:39:07 · 150 阅读 · 0 评论 -
exec系列函数
linux系统编程之进程(五):exec系列函数(execl,execlp,execle,execv,execvp)使用本节目标:exec替换进程映像 exec关联函数组(execl、execlp、execle、execv、execvp)一,exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种...转载 2020-04-11 11:02:55 · 240 阅读 · 0 评论 -
ps查看进程状态参数含义
USER 进程的属主;PID 进程的ID;PPID 父进程;%CPU 进程占用的CPU百分比;%MEM 占用内存的百分比;NI 进程的NICE值,数值大,表示较少占用CPU时间;VSZ 該进程使用的虚拟內存量(KB);RSS 該進程占用的固定內存量(KB)(驻留中页的数量);TTY 該進程在那個終端上運行(登陸者的終端位置),若...原创 2020-04-08 11:30:52 · 1155 阅读 · 0 评论 -
C++多线程同步之临界区(CriticalSection)
C++多线程同步之临界区(CriticalSection)一、Win32平台1、相关头文件和接口#include <windows.h>CRITICAL_SECTION cs;//定义临界区对象InitializeCriticalSection(&cs);//初始化临界区EnterCriticalSection(&cs);//进入临界区LeaveCrit...转载 2020-03-27 18:01:35 · 465 阅读 · 0 评论 -
sed 删除文本中的内容
sed 删除文本中的内容删除命令对照表练习例子删除/etc/passwd中的第15行 1 sed -i'1d'passwd 删除/etc/passwd中的8行到14行的所有内容 1 sed -i'8,14d'passwd 删除/etc/passwd中的不能登录的用户...转载 2020-03-26 14:24:11 · 751 阅读 · 0 评论 -
centos关闭ipv6
centos上如何禁用ipv6今天跑docker的时候发现映射端口之后的端口竟然是tcp6,这是因为ipv6没有关闭而docker默认使用tcp6的原因,所以我要把tcp6关闭,关闭方法如下:方法 1编辑文件/etc/sysctl.conf,vi /etc/sysctl.conf添加下面的行:net.ipv6.conf.all.disable_ipv6 =1n...原创 2020-03-25 14:56:28 · 1331 阅读 · 0 评论 -
shell编程之字符串处理
shell编程之字符串处理# 1 .#号截取,删除左边字符,保留右边字符,*// 表示从左边开始删除第一个 // 号及左边的所有字符echo ${var#*//}# 2. ## 号截取,删除左边字符,保留右边字符,##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符echo ${var##*/}# 3. %号截取,删除右边字符,保留左边字符,%/* 表示从右边...转载 2020-03-19 16:25:22 · 174 阅读 · 0 评论 -
ssh配置免密和连接慢问题
ssh连接慢问题处理原创 2020-03-14 11:30:29 · 1481 阅读 · 1 评论 -
Linux的SWAP分区
碰到这个问题:gcc : internal compiler error: Killed (program cc1plus)内存不足导致,需要扩展内存到虚拟内存来解决,于是总结整理了一下LINUX的SWAP管理问题无论是windows系统还是linux系统,除了物理内存外,都还有一个虚拟内存。在linux上,虚拟内存被称为swap space。过去以来,虚拟内存的大小应该是物理内存的两倍,...原创 2019-11-04 11:00:05 · 517 阅读 · 0 评论 -
静态链接库、动态链接库和动态加载库
静态链接库前言静态库是obj文件的一个集合(目标文件中通常仅解析了文件内部的变量和函数,对于引用的函数和变量还没有解析,这需要将其他已经编写好的目标文件引用进来,将没有解析的函数和变量进行解析,通常引用的目标是库),通常静态库以".a"为后缀,名字格式一般为libxxx.a。静态库由程序ar生成。实例程序如下:Main.c#include <stdio.h>ex...转载 2019-10-31 17:03:45 · 519 阅读 · 0 评论