- 博客(25)
- 收藏
- 关注
转载 I/O多路复用之Select
在Linux下有五种I/O模型,分别为:阻塞、非阻塞、信号驱动、复用I/O和异步I/O. 而在复用I/O中,比较常见的就是select、poll和epoll. 本文主要介绍select模型.一、select用法 #include<sys/select.h>int select(int nfds, fd_set *readfds, fd_set...
2017-07-15 17:16:00
161
转载 [探索]Linux下实现简单的FTP服务器
网上查了很多资料,90%的代码运行后,用linux下ftp命令登录不了. 后来发现实验楼中有个项目是FTP服务器,于是不得已又花了400大洋买了会员,结果其代码运行后,ftp命令也登录不了,真TM坑!!!我的400大洋啊!!!!! 无奈,只能自己探索一番了!一、抓包FTP连接过程 还好我有个服务器上有proftpd,因此,我准备先抓包剖析一下FTP的相关包....
2017-07-15 11:24:00
216
转载 TCP的四种定时器
一、重传计时器 TCP提供可靠机制,因此对于丢失的报文需要进行重传! 那么,发送一个数据出去之后,什么时候进行重传呢?用到了重传定时器. 在发送数据后,便立刻创建一个该报文段的重传定时器. 如果定时器还没结束,收到了确认报文,则撤销该定时器. 如果定时器结束,还没收到确认报文,则进行重发. 定时器时间为动态计算的,常见公式新RTT=旧RTT的90%+当...
2017-07-14 12:01:00
173
转载 用shell实现一个进度条
#!/bin/bashi=0str='#'ch=('|' '\' '-' '/')index=0while [ $i -le 25 ]do printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]} str+='#' let i++ let index=i%4 sleep 0.1d...
2017-07-14 11:44:00
145
转载 Shell下的命令代换与eval命令
在shell中,如果想获得一个命令的返回值,如果为整数,可以直接用$?获取其退出码. 但如果一条命令的返回值不是整数,怎么实现? 不得不提shell下的命令代换功能!两种方式实现命令代换 假设我们某个变量需要获得当前时间,则可以这样实现: date=`date` echo $date 或者也可以这样 date=$(date) ech...
2017-07-14 11:25:00
131
转载 关于TCP握手与挥手
TCP的三次握手 TCP在建立连接时会进行三次握手,其过程如下: 1.首先client会向server发送SYN=1,ACK=0,请求建立链接,同时自身进入SYN_SENT状态. 2.当server收到client的请求后,如果client请求的端口为开启状态则,server会向client发送SYN=1,ACK=1,给client以连接确认,及向client发出建立连...
2017-07-14 10:43:00
149
转载 [探索]Linux下用C语言写Arp欺骗工具(一)
本系列文章主要讲述自己如何从零开始研究,用C语言写一个Arp欺骗程序.(以记录过程为主,教程的话,有空开专题详谈.) 前言:今天已经搞了整整一天了,算是有点小成就,欺骗的核心代码非常简单,知道本机以及目标主机的mac地址,然后修改arp应答包即可. 但,作为一个工具,其用法总不能如下吧: Useage:./arpspoof [interface] [your_ip]...
2017-07-05 20:52:00
636
转载 TCP中的URG标志与PSH标志有什么不同?
为了解决这个问题之前,先复习一下TCP的报头. 一、TCP报头分析 第一行:从左到右表示16位源目标端口号与16位目地端口号,通过端口可以标识互联网上唯一的进程. 第二行:32位序号,用来保证数据的按序到达. 第三行:32位确认号,保证数据的完整性,如果没有收到确认,则进行重发. 第四行:4位首部长度,用来将报头与数据分离的.单位是4字节;保留6位;...
2017-07-01 15:27:00
164
转载 端口分类
一、概念 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL、Modem、集线器、交换机、路由器上用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。 逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。...
2017-07-01 11:35:00
1454
转载 linux下的信号屏蔽字
信号的表示 我们知道linux下,可以通过kill命令向进程发送信号. 当进程收到信号,执行处理动作被称为递达; 当进程接收到信号,还未来得及处理被称之为未决(pending); 进程可以选择阻塞某个信号,当某个信号被阻塞(block)时,永远不会递达! 因此,与这三种处理相对应,在进程的pcb中,存在三张位图来描述信号相关信息!block、pendin...
2017-06-28 16:00:00
151
转载 线程安全与可重入函数
一、线程安全 线程安全是指在多线程环境中,对临界资源进行加锁保护,不会出现数据不一致或数据污染.简单点来说,就是在多线程环境下并发运行,总是能得到正确的结果. 一般而言,线程不安全的原因往往在于对临界资源的访问没有进行特别的加锁处理. 不同的线程只有其私有栈空间与其寄存器的数据是私有的,其余都是共享的! 因此临界资源是指,全局变量、静态变量、堆空间等. 如果...
2017-06-28 15:03:00
110
转载 Linux下异步回收子进程
背景 我们知道,当一个进程fork出子进程后,没有对子进程进行回收,那么子进程运行完之后的状态会变为僵尸进程. 我们可以通过wait和waitpid来回收子进程,防止僵尸进程的出现. 但是wait和waitpid,要么以阻塞方式运行,要么以轮询方式运行,都极大的占用了CPU资源. 本文将介绍,父进程如何通过异步操作回收子进程!原理 在每个子进程运行完成之...
2017-06-27 21:50:00
177
转载 简述Linux下的守护进程
我记得,第一次将阿里云拿到手时,第一件事就是给它安装了一个unbutu14版本,第二件事就是对它进行update更新. 在输入apt-get update后,看到它开始更新软件列表时,我就想:诶?要是这个时候,我关闭掉ssh窗口,它更新还会不会运行? 略做思考,觉得这命令是运行在linux服务器上的,只要服务器不关,它应该会自动更新.....后来没做验证,这件事也就这么过...
2017-06-27 20:44:00
212
转载 生产者-消费者模型的两种实现方式
本文主要来总结生产者-消费者模型的代码实现,至于其原理,请大家自行百度.一、基于链表的生产-消费模型(条件变量) 我们以链表为例,生产者进行头部插入,消费者进行头部删除,因此,先将链表相关操作封装为LinkList.h,具体代码如下://////////////////////////////////////文件说明:LinkList.h//作者:高小调...
2017-06-27 17:08:00
288
转载 自定义实现mysleep
今天偶尔发现一个函数,很神奇,当我在考虑其用途时,灵光一现!突然好像明白了sleep底层的实现机制,因此我准备利用此函数来模拟实现一下自己的sleep函数!核心函数一:pause#include<unistd.h>int pause(void); 当该函数被调用时,进程会自动被挂起,直到有信号递达! 如果收到的信号的动作是结束进程,那么...
2017-06-26 16:53:00
149
转载 LInux进程间通信之信号量编程实例
一、信号量之创建信号量#include<sys/types.h>#include<sys/ipc.h>#include<sys/sem.h>int semget(key_t key,int nsems,int semflg); key:由ftok函数生成,唯一. nsems:需要申请的信号量数目. s...
2017-06-12 14:26:00
243
转载 LInux进程间通信之消息队列编程实例
本文主要通过消息队列的编程实例来加深对消息队列的理解.一、消息队列之创建 创建一个消息队列,需要用到一个函数:#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>int msgget(key_t key,int msgflg); ke...
2017-06-11 15:14:00
243
转载 [总结]死锁
一、概念 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 ——《百度百科》二、四个必要条件 死锁的出现一定需要以下四个必要条件,缺一不可: 1.互斥条件,每次资源只能被一个进程所使用. 2.请求与保持,当一个进程/线程去请求新资源而被阻塞时,还保持着原有的资源不放. 3....
2017-06-08 10:33:00
169
转载 [总结]Linux下的线程控制
一、线程概念 我个人理解线程,说简单点,是程序的一个控制流程,从代码的角度来看,它控制着一个函数的执行; 说复杂点,在linux下,它就是一个进程(仅限linux),因为在linux下对于线程并没有特别的数据结构去描述它. 简而言之,线程是代码的一个执行流.二、线程与进程的区别 线程与进程的区别,足够再写一篇博客了,在这里,我总结一下(夹杂着多线程与多进程的区...
2017-06-08 09:47:00
93
转载 [总结]gdb调试多进程/线程的命令
在编写linux代码时,根据某些场景,我们需要fork出一个/多个子进程来协助父进程完成一些工作. 当然多进程编程本身并不是特别的麻烦,通过pid的分流来使不同的子程序处理不同的流程. 当我们编写的多进程出现bug需要调试时,我们如何通过gdb来调试多进程呢? 本文主要分享在gdb下,如何调试多进程/线程.一、gdb调试多进程 在gdb调试时会默认进入到父...
2017-06-07 09:43:00
145
转载 简述Linux进程间通信之命名管道FIFO
上文聊到管道(pipe),可以使有亲缘关系的进程间进行通信. 对于没有亲缘关系的进程如何通信?本文来聊一聊命名管道FIFO.一、概念 命名管道FIFO,提供一个路径名与之关联,以文件形式存储于文件系统中. 一个进程以r方式打开,另一个程序以w方式打开,即可在两个进程之间建立管道. 通过以fifo文件作为媒介,可以使任意两个进程通过该文件进行通信. 命...
2017-06-04 18:54:00
172
转载 简述Linux进程间通信之管道pipe(下)
上篇文章的简述,我相信大家对管道的概念有了模糊的认识,本文通过代码实例来强化对管道的理解. 创建管道主要用到pipe函数,pipe的原型如下:一、函数原型 #include <unistd.h> int pipe(int pipefd[2]); 参数:一个整型数组,管道创建成功后,pipefd[0]表示管道的读端,pipefd[1]表示管道的写...
2017-06-03 20:07:00
108
转载 简述Linux进程间通信之管道pipe(上)
本文主要简述管道的相关概念、原理、特质、局限性以及分析管道的通信步骤及原理.一、概念 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,通过使用pipe函数在内核中开辟一段缓冲区来实现两个进程之间的通信.二、原理 管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现,是一个典型的生产者-消费者模型.三、特质 1.管道其本质是一个伪文件(实为内...
2017-06-03 10:01:00
120
转载 Linux给普通用户添加ssh权限
当我们创建好一个普通用户后,就一定会面临用户无法通过xshell登陆ssh的问题! 本文就教大家如何给普通用户添加ssh登录权限. 1.编辑/etc/ssh/sshd_config文件. 输入命令:"vim /etc/ssh/sshd_config" 添加配置项AllowUsers:username1 username2 (也可以添加用户组:AllowGroup...
2017-04-26 09:23:00
3303
转载 Linux给普通用户添加sudo权限
在Linux中,root用户权限是最高、操作起来也是最危险的用户. 因此,我们平常都通过普通用户来管理Linux,当我们成功创建好一个普通用户之后,就需要为此添加sudo权限. 本文就教大家在Linux系统中,如何给普通用户添加sudo权限. 1.如果当前用户为root用户,请跳过本步骤.否则进入root用户. 即输入命令:"su" 2.给/etc/sudo...
2017-04-26 09:02:00
299
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人