Linux学习
文章平均质量分 74
fern_girl
这个作者很懒,什么都没留下…
展开
-
shell脚本实现彩色进度条的编写
我们在之前写过c/c++实现的进度条,原理相同,这里主要着重于彩色进度条的实现这里只是一个带颜色的进度条,主要是让我们知道颜色如歌设置 代码:#!/bin/bashfunction bar(){str=''i=0j=0arr=('|' '/' '-' '\')while [ $i -le 100 ]do j=i let j%=4 str=#${str}原创 2017-07-06 15:11:53 · 511 阅读 · 0 评论 -
CRC循环冗余检验算法
1.为什么要有CRC循环冗余检验算法 数据在网络的传输过程中,都是以二进制数据传输,即不是0,就是1;数据传输过程中,因为各种可能的原因导致数据0变为1,1变为0。为了保证传输数据的可靠性,在计算机网络传输时,必须采用各种差错检测措施; CRC是我们运用在数据链路层的差错检验算法;2.CRC循环冗余检验算法的原理举例说明如何得到帧检验序列FCS假设待传输的数据M=101001(k=6),CRC原创 2017-06-12 14:38:18 · 2256 阅读 · 0 评论 -
poll服务器---多路连接之 poll
1.poll与select不同在于描述符存储方式不同和参数类型不同结构体数组的管理:当每次有需要关心的描述符时,将其放入结构体中,每次有无效的描述符后,将其描述符置-1,下次poll函数会忽略它。当有新的描述符加入时,从头遍历结构体,将为-1的元素设为要关心的描述符事件状态。切记:当新的描述符加到结构体数组末尾时要更新关心描述符个数,即poll第二个参数。 每次调用poll后,结构体元素reve原创 2017-07-01 19:12:57 · 589 阅读 · 0 评论 -
epoll服务器---I/O多路转接之epoll
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关心的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下: epoll_create:原创 2017-06-30 16:46:17 · 323 阅读 · 0 评论 -
select服务器---I/O多路连接之select
现如今,提高网络服务器的性能,提高I/O的性能,我们知道I/O系统其实做了两件事,一是等待数据就绪,二是数据的搬移;尤其是远距离网络传输“等”状态尤其明显,所以提高I/O性能本质是减少等的比重,其越趋近于0,效率就越高;I/O模型中提供一种多路复用模型,一次等待多个文件描述符,只要存在就绪文件,就可进行读写,大大提高了I/O的性能; 多路链接中存在三个特殊的函数select、poll、epoll,原创 2017-06-29 22:17:56 · 389 阅读 · 0 评论 -
守护进程Daemon---fork两次
1.什么是守护进程? 守护进程也叫精灵进程,是在后台运行的一种特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件; 在 linux系统启动时会有很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互,除守护进程外其他进程都是在用户登录或运行程序时创建,在系统注销时终止,但系统服务程序不受用户登录注销的影响(原因:它跟终端没有关系),我们把这种进程叫做守护进程。原创 2017-06-08 15:30:24 · 625 阅读 · 0 评论 -
TCP三次握手和四次挥手
TCP是面向来连接的协议,运输连接有三个阶段:建立连接(三次握手)、数据传送、释放连接(四次挥手);一、TCP的连接建立1.如图:建立链接(三次握手)具体步骤:(假设A是客户,B是服务器)A主动打开链接,B被动打开链接,此时两端的TCP处于CLOSED状态;B的TCP服务进程先创建传输控制块TCB,准备接收客户的请求,B处于LISTEN状态;A的客户进程首先创建传输控制块TCB,然后向B发送连原创 2017-06-20 10:38:41 · 315 阅读 · 0 评论 -
URG和PSH区别以及TCP协议定时器
一、URG&PSH的区别 TCP的报头信息有六个控制位,说明本段文的性质;分别为紧急URG、确认ACK、推送ACK、复位RST、同步SYN、终止FIN;今天我们来主要来介绍介绍PSH和URG的区分;1.URG是什么? URG表示紧急指针,与紧急指针字段搭配使用,当URG = 1时,表示紧急指针字段有效。它告诉系统此报文有紧急数据,应尽快传送(相当于高优先级数据),而不按照原来的排序顺序来传送;原创 2017-06-20 08:23:14 · 575 阅读 · 0 评论 -
linux下定时任务的方法crontab
crond是什么? 使用crond(cron监控程序)来定期运行一些任务比如备份日志、数据库、 把日志发送到自己邮箱等等操作都可以又定期运行程序来完成。 crond是个脚本每次Linux启动的时候都自动起到该脚本该脚本是 /etc/rc.d/init.d下面的每次系统启动的时候就自动会启动该目录下的脚本。 cron有两个配置文件一个/etc/crontab是一个全局配置文件一组cr原创 2017-06-07 18:46:56 · 285 阅读 · 0 评论 -
gdb调试多进程和多线程
一、gdb调试多进程多线程代码2.默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。 follow-fork-mode 和detach-on-fork 说明<1>,设置方法:s原创 2017-06-07 10:22:33 · 655 阅读 · 0 评论 -
ARP协议
1.什么是ARP协议ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议。某节点的IP地址的ARP请求被广播到网络上后,这个节点会收到确认其物理地址(MAC地址)的应答,这样的数据包才能被传送出去。RARP(逆向ARP)经常在无盘工作站上使用,以获得它的逻辑IP地址。2.为什么要有ARP协议?我们在实际应用中经常遇到这样的问题,已知一个主原创 2017-06-12 16:00:47 · 341 阅读 · 0 评论 -
多进程多线程服务器(tcp_server)编写
编写客户/服务器1.编写单进程客户/服务器(Version1)代码清单: tcp_servet#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>static原创 2017-06-23 23:21:25 · 1035 阅读 · 0 评论 -
传输层概述以及传输层端口
一、运输层协议概述两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到原创 2017-06-14 22:33:24 · 11773 阅读 · 0 评论 -
传输层概述以及传输层端口
一、运输层协议概述两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到原创 2017-06-14 22:29:02 · 1329 阅读 · 0 评论 -
NAT技术与代理服务器
一、NAT技术 1.在了解NAT技术之前,我们首先来了解一下什么是专用互联网? 专用网互联网简称专用网,是由专用IP地址构成的互联网或本地网络;2.什么是专用IP地址? 由于IP类型IPv4提供的IP地址已经不够现如今网络主机的需求,为了缓解这用问题,我们在一个机构内部进行通信时,采用专用地址,但专用地址只能作位一个机构内部通信的IP地址,不能用于和互联网上的主机通信,所以,在不同的组织机构,原创 2017-06-13 22:34:33 · 400 阅读 · 0 评论 -
socketpair和dup---高级I/O
一、我们在学习进程间通信的时候学习过匿名管道pipe,匿名管道的特点:只能用于单向通信只能用于有血缘关系的两个进程,通常是父子进程生命周期随进程面向字节流具有同步机制我们现在学习一种新的管道socketpair,可以用于双向通信,也是用于父子进程,代码实现与匿名管道类似#include<stdio.h>#include<sys/types.h>#include<sys/socket.原创 2017-06-25 20:28:04 · 563 阅读 · 0 评论 -
udp套接字及应用层udp超时重传
编写udp服务器1.注意要点:udp是无连接,不稳定,面向数据报的一种传输层协议;既然他不可靠为什么还要用呢?其一:当应用程序使用广播或多播时只能使用UDP协议;其二:由于他是无连接的,所以速度快如果一方的数据报丢失,那另一方将无限等待,解决办法是设置一个超时重传机制;建立UDP套接口时socket函数的第二个参数应该是SOCK_DGRAM,说明是建立一个UDP套接口;由于UDP是无连接原创 2017-06-25 19:00:52 · 10671 阅读 · 3 评论 -
shell中的eval以及与 反引号``、$()的区别
本文转载自:shell中的eval shell 中的 eval 功能说明:重新运算求出参数的内容。语 法:eval [参数]补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。参 数:参数不限数目,彼此之间用分号分开。1.eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的转载 2017-07-03 17:54:05 · 1284 阅读 · 0 评论 -
进程池与线程池---实现服务器
1.池的概念 由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。很显然,直接从池中取得所需资源比动态分配资源原创 2017-06-24 21:06:22 · 1752 阅读 · 0 评论 -
tcp_socket绑定(bind)失败---Address already is use原因
我们前面介绍了三种tcp_server编写多进程多线程服务器编写,在测试这三个servet我们遇到一个问题,就是当我们绑定一个端口号后,ctrl-z结束掉server服务器,此时再次绑定该端口号会出现这样的出错提示:显示端口号正在被使用,可是我们已经关闭了服务器了,为什么不能使用呢?但过一端时间之后,该端口号又可以使用了,这又是为什么呢?IBM官网给出了具体解释linux套接字编程的五大隐患 其中原创 2017-06-24 07:39:58 · 28701 阅读 · 2 评论 -
bind error : Cannot assign requested address,该如何处理
bind error : Cannot assign requested address 代码:#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>static原创 2017-06-24 08:07:41 · 27534 阅读 · 3 评论 -
gcc -o的优化选项
本文转载自:Linux基本操作 查查gcc手册就知道了,每个编译选项都控制着不同的优化选项 下面从网络上copy过来的,真要用到这些还是推荐查阅手册 -O设置一共有五种:-O0、-O1、-O2、-O3和-Os。 除了-O0以外,每一个-O设置都会多启用几个选项,请查阅gcc手册的优化选项章节,以便了解每个-O等级启用了哪些选项及它们有何作用。 让我们来逐一考察各个优化等级: -O0:这个等级(转载 2017-05-08 15:53:11 · 397 阅读 · 0 评论 -
信号---信号的阻塞
一、信号在内核中的表示 1.首先我们来了解几个基本的概念信号的递达(Delivery):实际执行信号的三种处理动作;信号的未决(pending):信号从产生到递达之间的过程;阻塞信号(Block):被阻塞的信号产生时将保持在未决的状态,直到进程解除对此信号的阻塞,才会执行递达动作;2.阻塞和忽略的区别 忽略是信号默认处理动作的一种,即信号的递达,而阻塞是信号未决的状态,只有解除阻原创 2017-04-23 18:22:57 · 512 阅读 · 0 评论 -
信号量
一、首先:我们要知道信号量是什么? 信号量的本质是数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。这是书本上介绍的信号量的概念,自己的理解比较简单: 信号量就是具有原子性的计数器,就相当于一把锁,在每个进程要访问临界资源时,必须要向信号原创 2017-03-10 20:44:41 · 15737 阅读 · 1 评论 -
编写简单shell
shell英文翻译为外壳,壳的意思;而在linux操作系统中,我们将它作为操作系统的外壳来理解。原创 2017-03-03 14:41:31 · 291 阅读 · 0 评论 -
Access/Modify/Change时间
首先我们在创建一个文件test.c,然后使用stat命令查看文件test.c的各种属性上面就是test.c文件的属性,其中出现的三个时间,Access/Modify/Change含义如下: Access:文件最近一次被访问的时间;当编辑器打开文件时,使用cat,more,less,grep,sed读取文件内容将会刷新 Access的时间,使用l原创 2017-02-14 21:03:01 · 410 阅读 · 0 评论 -
匿名管道、命令管道、管道容量以及管道组织方式
进程间的通信主题一-----管道 每个进程各自有不同的⽤用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Com!) 简言之,进程间通信的本质就是让不同的进程间可以原创 2017-02-27 19:09:45 · 523 阅读 · 0 评论 -
linux系统进程终止atexit函数 特殊权限s/t File结构体的信息内容
进程终止 进程终止的⽅方式有8种,前5种为正常终止,后三种为异常终止: 1 从main函数返回; 2 调用exit函数; 3 调用_exit或_Exit; 4 最后一个线程从启动例程返回; 5 最后一个线程调⽤用pthread_exit; 6 调用abort函数; 7 接到一个信号并终⽌止; 8 最后一个线程对取消请求做出响应。原创 2017-02-20 13:12:28 · 360 阅读 · 0 评论 -
Linux中find命令
Linux下find命令在目录结构中搜索文件,并执行指定的操作。转载 2017-02-18 22:48:42 · 413 阅读 · 0 评论 -
linux进程管理之task_struct结构体
进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/转载 2017-02-18 22:11:27 · 345 阅读 · 0 评论 -
Linux常见的进程调度算法
进程调度是系统内部的低级调度,进程调度的策略通常有先来先服务算法,最高优先权优先调度算法,最短进程优先调度算法等。原创 2017-02-18 21:20:46 · 717 阅读 · 0 评论 -
vim的配置
首先展示一下我自己配置的vim界面首先进行的是基本的配置:winpos 5 5 " 设定窗口位置set lines=30 columns=100 " 设定窗口大小set nu " 显示行号set go= " 不要图形按钮 set guifont=Courier_New:h10:cANSI原创 2017-02-16 22:13:22 · 323 阅读 · 0 评论 -
死锁的产生及解决
死锁的概念:多个线程因竞争资源而导致进程处于一直挂起的状态;“死锁”产生的四种情景:单线程重复申请锁。 如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁被自己占用,该进程又挂起没有机会释放锁,因此就永远处于挂起等待状态,造成死锁。双线程多锁申请 例如两个线程A和B,线程A获得了锁1,线程B获得了锁2,这时线程A试图调用lock获原创 2017-03-30 21:07:09 · 365 阅读 · 0 评论 -
互斥锁---线程的同步与互斥
前面我们验证了互斥锁能够保证线程的互斥操作,让各线程对全局变量的累加的次数保证了正确性线程—中互斥锁的接口函数 互斥锁的初始化以及销毁函数: 初始化互斥锁有两种方式,一种是函数初始化,参数arr表示的是mutex的属性,一般为NULL,设置为默认属性;另一种是直接定义一个全局变量,并用宏PTHREAD_MUTEX_INITIALIZER初始化该变量。互斥锁的“加锁”和“解锁”函数 这里原创 2017-03-31 17:25:33 · 372 阅读 · 0 评论 -
信号---信号的产生
通过我的上篇文章可以了解到信号的基本概念,本篇我们复习总结信号是如何产生,信号的类型和信号如何处理,信号的产生总结起来有三种形式,分别如下:通过终端按键产生信号;通过调用系统函数向进程发送信号;由软件条件产生信号;硬件异常产生的信号;一、通过终端按键产生信号1.我们在前面的信号的基本概念中提到过的ctrl -c产生SINGINT信号、ctrl -\产生SIGQUIT信号、ctrl -z产生原创 2017-04-23 17:12:36 · 3096 阅读 · 0 评论 -
线程安全和可重入函数的基本概念
一、线程安全 1.线程安全的概念(有下面两种说法):如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,(也就是说我们不用考虑同步的问题)。线程安全产生的原创 2017-04-19 19:46:31 · 265 阅读 · 0 评论 -
读写锁------进程的同步与互斥
读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。这里我们出现了一个新的概念,自旋锁;原创 2017-04-06 15:00:14 · 3518 阅读 · 4 评论 -
信号量------线程的同步与互斥
我们前面介绍了线程的同步与互斥中的互斥锁与条件变量,接下俩我们实现线程的同步与互斥的下一个主题:信号量我们在进程中也学习过信号量信号量—-进程间通信,那个信号量完全可以运用在线程通信上,且信号量是以集合的形式出现,我们实现线程间的互斥所用的信号量是以个数的形式出现,而且实现要比进程间通信的信号量简单的多。信号量的函数接口: 信号量初始化 参数: sem表示我们定义的信号量; pshare原创 2017-04-06 14:25:21 · 397 阅读 · 0 评论 -
线程---上
一、什么叫做线程? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个原创 2017-03-16 18:33:37 · 168 阅读 · 0 评论 -
共享内存
本文部分转载自:http://blog.csdn.net/ljianhui/article/details/10253345 进程间通信的一个主题:共享内存 一、什么是共享内存? 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自转载 2017-03-15 22:25:41 · 239 阅读 · 0 评论