
linux
文章平均质量分 52
Michael-H
技术改变世界
展开
-
TCP/IP 协议栈
TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。由于我们大部分时间都工作在应用层,下层的事情不用我们操心;其次网络协议体系本身就很复杂庞大,入门门槛高,因此很难搞清楚TCP/IP的工作原理,通俗一点讲就是,一个主机的数据要经过哪些过程才能发送到对方的主机上。 接下来,我们就来探索一下这个过程。0转载 2021-11-11 10:23:34 · 498 阅读 · 0 评论 -
TCP/IP协议知识科普
简介本文主要介绍了工作中常用的TCP/IP对应协议栈相关基础知识,科普文。TCP/IP网络协议栈TCP/IP网络协议栈分为四层, 从下至上依次是: 链路层 其实在链路层下面还有物理层, 指的是电信号的传输方式, 比如常见的双绞线网线, 光纤, 以及早期的同轴电缆等, 物理层的设计决定了电信号传输的带宽, 速率, 传输距离, 抗干扰性等等。 在链路层本身, 主要负责将数据跟物理层交互, 常见工作包括网卡设备的驱动, 帧同步(检测什么信号算是一个新帧), 冲突检测(如果有冲突就自动转载 2021-11-11 10:08:27 · 933 阅读 · 0 评论 -
浅谈CLOSE_WAIT
浅谈CLOSE_WAITTCP 有很多连接状态,每一个都够聊十块钱儿的,比如我们以前讨论过TIME_WAIT和FIN_WAIT1,最近时不时听人提起 CLOSE_WAIT,感觉有必要梳理一下。所谓 CLOSE_WAIT,借用某位大牛的话来说应该倒过来叫做 WAIT_CLOSE,也就是说「等待关闭」,如果你还不理解其含义,可以看看 TCP 关闭连接时的图例:TCP Clo...转载 2020-01-15 19:10:38 · 618 阅读 · 0 评论 -
关于FIN_WAIT2
FIN_WAIT2问题让我们热热身,通过一张旧图来回忆一下 TCP 关闭连接时的情况:TCP Close按照正常的状态迁移路径,当 FIN_WAIT2 收到 FIN 包后会迁移到 TIME_WAIT 状态。如果没有收到 FIN 包,那么连接状态会如何迁移,我们不妨测试一下:#!/usr/bin/env pythonimport socketimport times ...转载 2020-01-15 19:09:29 · 1094 阅读 · 0 评论 -
关于FIN_WAIT1
TCP 关闭连接时的情况:TCP Close看图可知,主动关闭的一方发出 FIN,同时进入 FIN_WAIT1 状态,被动关闭的一方响应 ACK,从而使主动关闭的一方迁移至 FIN_WAIT2 状态,接着被动关闭的一方同样会发出 FIN,主动关闭的一方响应 ACK,同时迁移至 TIME_WAIT 状态。回到开头的问题:FIN_WAIT1 能持续多久?一般情况下,服务器间的 ACK ...转载 2020-01-15 18:48:04 · 1885 阅读 · 0 评论 -
gdb调试多进程程序
1.gdb下调试多进程程序只需要以下几条命令即可 除此之外还可以查看正在调试的进程 info inferiors, 同时也可以将当前正在调试的进程切换到另外一个进程中让其取运行 2.代码调试演示#include<stdio.h>#include<stdlib.h>#include<unistd.h>void...转载 2020-01-09 11:35:50 · 242 阅读 · 0 评论 -
gdb调试当前运行的程序
gdb调试当前运行的程序为什么使用gdb调试正在运行的程序? 因为有时候bug很难复现、或者环境搭建起来比较困难,所以在出现bug的时候可以使用gdb的attach功能调试正在运行的GCC编译出来的程序,注意编译选项要加-g,否则没有符号表。调试步骤? 1. 编译时候带-g选项。 2. 运行程序。 3. ps找到进程号。 4...转载 2020-01-09 11:31:12 · 4125 阅读 · 0 评论 -
linux top命令看到的实存(RES)与虚存(VIRT)分析
linux top命令看到的实存(RES)与虚存(VIRT)分析近期在公司中解决程序使用的内存高问题,将一部分之前无法回收的内存进行了回收,实现降内存效果(降实存)。在统计效果时, QA问是统计RES(实存)还是VIRT(虚存)。在网上学习看了一些博客,这里自己总结一下RES和VIRT的区别。1. 概念VIRT: 1 2 3 1...转载 2020-01-09 09:12:39 · 1613 阅读 · 0 评论 -
linux下的C语言开发(动态库)
动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软转载 2016-01-15 09:51:07 · 386 阅读 · 0 评论 -
PKCS#11及CSP接口标准
RSA非对称密码算法的三个创始人的姓的第一个字母联合起来就是RSA了,他们三个创建的公司的名字也就叫做RSA。在RSA有一个著名的公钥算法的实验室,这个实验室颁发的一系列行业标准就称作为PKCS标准,其中PKCS#11(简称P11)就是针对密码设备的接口指令标准。目前最新的版本应该是2.3了。P11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot转载 2016-02-19 11:30:29 · 2734 阅读 · 0 评论 -
Linux下如何生成core dump文件
转载:http://leonzhan.iteye.com/blog/803008Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。使用ulimit -转载 2016-03-30 10:21:45 · 620 阅读 · 0 评论 -
extern C的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有转载 2016-02-23 11:42:39 · 393 阅读 · 0 评论 -
grep 查找字符串
在当前目录下查找字符串在那个文件下,文件的哪行。grep -rn "hello boy!" ././ 是表示在当前目录下查找-r 是递归查找-n 是显示行号原创 2016-02-24 11:10:00 · 643 阅读 · 0 评论 -
公钥加密技术
公钥加密技术对称加密 symmetric cryptographic非对称加密 asymmetric cryptographic密钥交换协议 key agreement/exchange哈希算法 Hash报文认证码 MAC数字签名 digital signature数字证书转载 2016-02-24 16:54:01 · 4607 阅读 · 0 评论 -
linux软链接ln命令的用法
linux软链接ln命令的用法: 举例:因/home分区大小有限,需要将/usr/local/mysql/date和/home/psx/psx/ccrecord这两个文件夹的内容存放到/mnt分区下 1.先将原来的真实文件夹移动或重命名下 mv /usr/local/mysql/date /usr/local/mysql/date_bak mv/home/ps转载 2016-03-22 09:51:29 · 1636 阅读 · 0 评论 -
PAM(一)
学着写PAM 模块之前了解下PAM的大致情况是不错的选择(也是必须的),所以这里也只好引用一下关于PAM简介的内容了 原文地址:http://blog.youkuaiyun.com/yyyyangyang/article/details/6589086一、什么是PAMPAM(Pluggable Authentication Modules)可插拔认证模块,最初是有Sun公司提出的一种认转载 2016-03-22 13:54:10 · 1090 阅读 · 0 评论 -
linux下的C语言开发(静态库)
在我们编写软件的过程当中,少不了需要使用别人的库函数。因为大家知道,软件是一个协作的工程。作为个人来讲,你不可能一个人完成所有的工作。另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把时间浪费在这些重复的工作上面。 既然说到了库函数,那么一般来说库函数分为两种方式:静态库和动态库。两者的区别其实很小,静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文转载 2016-01-15 09:49:39 · 387 阅读 · 0 评论 -
C语言多线程pthread库-互斥锁
C语言多线程pthread库相关函数说明线程相关操作说明 一 pthread_t pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义: typedef unsigned long int pthread_t; 它是一个线程的标识符。 二 pthread_create 函数pthread_create用来创转载 2016-02-01 13:26:30 · 8560 阅读 · 0 评论 -
linux下如何自动生成Makefile文件
1、在工程目录下执行 qmake -project 生成pro文件2、执行qmake指令,自动生成makefile文件原创 2016-01-18 14:57:38 · 958 阅读 · 0 评论 -
GDB调试带参数程序
版权声明:本文为博主原创文章,未经博主允许不得转载。[cpp] view plaincopy#include #include #include #include /*ESRCH*/ #define MINI_STACK_SIZE (0x20000) #define MINI_PRIORIT转载 2015-12-16 17:28:59 · 558 阅读 · 0 评论 -
Shell bash 脚本语法
1 Shell介绍Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shel转载 2016-01-05 11:16:55 · 526 阅读 · 0 评论 -
Linux守护进程的编程实现
Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本转载 2015-12-23 17:20:00 · 347 阅读 · 0 评论 -
linux下获取程序当前目录绝对路径
1. Shell 版本 #获取当前脚本所在绝对路径 cur_dir=$(cd "$(dirname "$0")"; pwd)2. C语言版本方法一、用realpath函数。这种方法用于开机启动程序获取自身目录会出错char current_absolute_path[MAX_SIZE];//获取当前目录绝对路径if (NULL == re转载 2015-12-24 16:05:07 · 4337 阅读 · 0 评论 -
atoi 和itoa用法
1.itoa 在linux下没有itoa这个函数 原型:char *itoa(int value,char *string,int radix) 用法:#include 功能:将整数value转换成字符串存入string, radix为转换时所用基数(保存到字符串中的数据的进制基数 2 8 10 16)转载 2015-12-07 16:12:25 · 434 阅读 · 0 评论 -
C语言 时间戳和标准格式的转换
http://ilewen.com/questions/3990[cpp] view plaincopyint main(int argc, char **argv) { time_t t; t = time(NULL); struct tm *lt; int ii = time(&t);转载 2015-12-07 11:03:28 · 1929 阅读 · 0 评论 -
linux下程序定时重启脚本
#!bin/bashwhile : do if [ $(ps -ef | grep "JJFleetyGateway"| grep -v "grep" | wc -l) -eq 1 ];then kill $(ps -ef|grep "JJFleetyGateway"| grep -v "grep"|awk '{print $2}')转载 2016-01-29 13:15:10 · 2898 阅读 · 0 评论 -
Linux定时执行脚本
摘要:在Linux下的两种定时执行任务的方法:at命令,以及crontab服务。(1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。(2)crontab cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。在Linux下的两种定时执行任务的方法:at命令,以及crontab服务。 (1)at命令 假如我们只是想要让转载 2016-01-29 13:16:58 · 560 阅读 · 0 评论 -
PAM(二)
上一篇转贴了一些关于PAM结构的一些内容,关于应用程序如何调用PAM 的API实现身份认证和会话操作的内容不是这篇内容所关心的,就不在赘述.对话函数作为应用程序和PAM 模块信息交互的"中介",其作用非常的重要.因此下面准备小谈一下对话函数.我本人也是新手,自己写一个对话函数肯定是要漏洞百出,那下面就转贴一段代码和大家一块分析下好了这里的链接是代码出处.点击打开链接#inclu转载 2016-03-22 13:55:49 · 839 阅读 · 0 评论 -
PAM(3)
写到这一篇才发现自己了解的远没有预期的多..上一次说了对话函数,对话函数是PAM模块与使用PAM进行认证的应用程序进行信息交互的桥梁,通过对话函数PAM模块可以获得用户的输入信息(明文、密文),还有两套很重要的函数pam_set_data(pam_handle_t *pamh, const char *pname, void *pdata, void (*freefunc)转载 2016-03-22 13:56:33 · 1348 阅读 · 0 评论 -
udev详解
如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs, 一个基于内核的动态设备文件系统,他首次出现在2.3.46内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建 的设备文件是动态的。转载 2016-06-20 15:03:57 · 901 阅读 · 0 评论 -
Linux上用udev自动识别并挂载U盘
最近想在U盘中放置一个配置文件,当U盘插入时自动读取配置文件。发现插上U盘后,在/dev下产生sda1、adb1、sdc1等不定设备,需要手动挂载才行。根据网上了解,可以通过udev来实现U盘的自动识别和挂载,操作方法如下: 1. 在/etc/udev/rules目录下新建11-add-usb.rules和11-add-remove.rules,负责设备监测。root@am转载 2016-06-21 09:09:41 · 3431 阅读 · 0 评论 -
linux下iconv()函数的用法
linux shell 配置文件中默认的字符集编码为UTF-8 。UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不是一个层次上的。在LINUX上进行编码转换时,可以利用iconv命令实现,这是针对文件的,即将指定文件从一种编码转换为另一种编码。 查了下iconv命令用法如下:iconv [选项转载 2016-09-19 11:25:15 · 960 阅读 · 0 评论 -
linux 命令终端提示符显示-bash-4.2#解决方法
昨天在配置Linux,突然发现root登录的CRT的终端提示符显示的是-bash-4.2# 而不是root@主机名 + 路径的显示方式。搞了半天也不知道为什么出现这种情况。今天终于搞定这个问题, 原因是root在/root下面的几个配置文件丢失,丢失文件如下: 1、.bash_profile 2、.bashrc 以上这些文件是每个用户都必备的文件。 使用以下命令从主默认文件重新转载 2017-01-17 17:05:46 · 1194 阅读 · 0 评论 -
网卡故障:弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的设备
弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接’System eth0’的设备今天在使用putty连接linux6.0系统远程的时候,重启网卡的时候发现此报错:报错截图如下:排错步骤如下:1:查看系统是否识别相应网卡(发现没有eth0网卡存在):根据显示信息我们可以初步判定系统网卡信息有问题:2:查转载 2017-01-17 17:06:48 · 7666 阅读 · 2 评论 -
makefile模板
1、编译动态库[plain] view plain copy############################################################# # Makefile for shared library. # 编译动态链接库 #################################转载 2017-03-14 19:07:37 · 473 阅读 · 0 评论 -
编译安装libiconv报错:./stdio.h:1010:1: error: 'gets' undeclared here (not in a function)
转自:http://www.linuser.com/thread-1482-1-1.html如题:配置编译参数通过,在进行 make 的时候报如下错误:In file included from progname.c:26:0:./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)_GL_WARN_ON_USE ...转载 2018-03-08 11:15:26 · 2071 阅读 · 0 评论 -
基于OpenSSL 1.1.1版实现的SM2签名与验签C程序
OpenSSL 1.1.1 版提供了对国密 SM4、SM3、SM2 算法的支持。对于 SM2 算法,在源码的 crypto/sm2 目录下,sm2_sign.c 文件中实现了 SM2 签名与验签,sm2_crypt.c 文件中实现了 SM2 加密与解密,这些源码是很好的学习范例。但是sm2.h, sm3.h, sm4.h 这些头文件是放在源码的 crypto/include/inter...转载 2019-08-22 13:52:07 · 7177 阅读 · 4 评论 -
openssl的证书链验证
使用openssl验证证书链可以用以下命令:debian:/home/zhaoya/openssl#openssl verify -CAfile ROOT_CERT USER_CERT其中的ROOT_CERT可以包含很多证书,可以用cat命令将多级的ca证书合并到一个文件里面,然后程序启动以后会加载ROOT_CERT,ROOT_CERT会在内存中形成一个堆栈结构,各个证书的顺序和文件里面的转载 2016-06-30 14:05:33 · 12451 阅读 · 0 评论 -
数字证书及其认证过程
众所周知,公钥密码学通过使用公钥和私钥这一密钥对,使数字签名和加密通讯等密钥服务变得容易起来。公钥技术之所以能得到广泛的应用,原因就在于对那些使用密钥对中的公钥来获得安全服务的实体,他们能很方便地取得公钥,即密钥分发与管理比起对称密钥的分发与管理变得简单了。所以有人称,非对称密码算法是计算机安全通讯的一次技术革命。 当然,公钥的分发也需要数据完整性保护措施,即需要数据完整性服务来保障公钥转载 2016-06-28 10:57:40 · 2723 阅读 · 0 评论 -
PAM(4)
有了前面的知识,今天将和大家一起写一个简单的PAM模块好了废话不说了直接写吧(文件为 pam_test.c)[cpp] view plain copy#define PAM_SM_AUTH #include #include #include #include #include #defi转载 2016-03-22 13:57:15 · 1078 阅读 · 0 评论