Linux知识库
文章平均质量分 92
Quinn0918
在生活中,对于自己和别人,我常常会说:“人生没有白走的路,每一步都算数!”
在干部生涯中,至今还担任院学生会主席,我经常对我的干部们说“在别人之上要把别人当人,在人之下要把自己当人。”
此时此刻,我想在博客里对自己说:“就在这儿,一定要成功!”
展开
-
linux环境下find的所有用法以及粘滞位的说明
1.Linux中find常见用法示例find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参数;pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所给出的原创 2017-03-26 16:38:35 · 1316 阅读 · 0 评论 -
linux进程通信之信号量、共享内存
这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码原创 2017-05-21 11:29:54 · 696 阅读 · 0 评论 -
守护进程
一、什么是守护进程1、守护进程的引入 在现实生活中, 许多大型的软件或服务器必须保证7*24小时(一周7天,一天24小时)无障碍的运行,例如淘宝网、百度搜索引擎、支付宝等等,那么像这样一种要一直运行的程序怎么实现呢?究其本质其实就是我们的守护进程。2、守护进程的定义 守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的原创 2017-06-18 14:56:47 · 920 阅读 · 0 评论 -
网络服务端口分类
1. 一共有多少有效端口?计算机一共有65535个有效端口,但是一般使到的也就是十几个2.端口是如何分类的?端口可分为3大类: 1) 公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。 2) 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一原创 2017-06-18 22:58:37 · 856 阅读 · 0 评论 -
基于单链表、环形队列(并发有锁)的多线程生产者消费者模型
在这之前的我已经介绍过生产者消费者模型,不懂的可以下跳地址: http://blog.csdn.net/quinn0918/article/details/728259921、环形缓冲区缓冲区的好处,就是空间换时间和协调快慢线程。缓冲区可以用很多设计法,这里说一下环形缓冲区的几种设计方案,可以看成是几种环形缓冲区的模式。设计环形缓冲区涉及到几个点,一是超出缓冲区大小的的索引如何处理,二是如何表示缓原创 2017-06-03 22:59:25 · 2249 阅读 · 0 评论 -
CRC校验
基本概念对应关系:多项式和二进制数有直接对应关系:X的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:X的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(X)和信息多项式C(X)。 如生成多项式为G(X)=X4+X3+X+1,可转换为二进制数码11011。 而发送信息位1111,可转换为数据多项式为C(X)=原创 2017-06-24 11:48:46 · 1084 阅读 · 0 评论 -
ARP协议以及获取MAC脚本
arp协议 : 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个原创 2017-06-24 11:54:00 · 2281 阅读 · 0 评论 -
NAT技术与代理服务器详解
NAT技术原理与应用1 概述1.1 简介1.1.1 名词解释公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(网络信息中心)或者ISP(网络服务提供商)分配的地址,对外代表一个或多个内部局部地址,是全球统一的可寻 址的地址。私有IP地址:也叫内部地址,属于非注册地址,专门为组织机构内部使用。因特网分配编号委员会(IANA)保留了3块IP地址做为私有IP地址:10.0.0.0 ——— 10原创 2017-06-24 19:44:24 · 3859 阅读 · 0 评论 -
路由表生成算法以及收敛路由原理
路由表简介路由:数据包从源地址到目的地址所需要经过的路径,由一系列节点组成。 路由节点:一个具有路由功能的主机或者路由器,维护一张路由表,通过查询路由表来决定向那个节点发送数据包。 路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接收和发送,其中最后一个是缺省路由条目。 路由条目:路由表中的每一行,每个条目主要由网络地址、子网掩码、下一跳地址、发送接收四部分组成原创 2017-06-24 20:32:33 · 5364 阅读 · 0 评论 -
信号的捕捉与模拟实现sleep函数
信号的捕捉:如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。 信号的处理有三种方式。 那么它是在什么时候处理信号的呢? 我们来看一张图。 0,一张图,两半,上为用户态(运行态),下面为内核态(管理态)。 1, 上图为信号的捕捉,处理流程。 2,图中3,4 是为了处理用户自定义的句柄。 3,图中有4个内核与用户的切换。 4,用户处理信号的时机:从内核原创 2017-06-15 16:15:47 · 766 阅读 · 0 评论 -
对比线程安全和可重入函数
可重入函数函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次 进入该函数,这称为重入。 然而有可能因为重入而造成错乱,像这样 的函数称为不可重入函数, 反之,如果一个函数只访问自己的局部变量或参数,则称为可重入 (Reentrant) 函数。 可重入函数: 重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static)原创 2017-06-15 16:20:02 · 429 阅读 · 0 评论 -
子进程的异步等待方式
等待: 等待有阻塞等待和非阻塞等待。 我们用非阻塞等待来实现异步。 1, 子进程终止时会给父进程发送SIGCHLD信号 2, 为了验证子进程在退出时确实向父进程发送了SIGCHLD信号,我们对SIGCHLD信号进行捕捉 3,#include<stdio.h>#include<stdlib.h>#include<sys/wait.h>#include<signal.h>#includ原创 2017-06-15 16:25:32 · 563 阅读 · 0 评论 -
TCP->多进程服务器->多进程服务器->线程池
TCP流式套接字makefile 1 2 .PHONY:all 3 all:tcp_client tcp_server 4 5 tcp_client:tcp_client.c 6 gcc -o $@ $^ -stat原创 2017-07-31 14:58:32 · 988 阅读 · 0 评论 -
URG和PSH的区别与联系
URG(紧急位): 急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。T C P的紧急方式是发送端向另一端发送紧急数�D(D�的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的)PSH(急迫位): 在一个交互程序中,当客户发送一个命令给服务器时,它设置P U S H标志并停下来等待服务原创 2017-07-20 02:58:38 · 1408 阅读 · 0 评论 -
Tcp->三次握手和四次挥手
TCP协议中的三次握手和四次挥手建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。那如何原创 2017-07-20 03:06:19 · 1036 阅读 · 0 评论 -
shell脚本
shell脚本()单括号和“反引号的区别注意:编写shell脚本时,定义变量时不加$,使用时要加$,用以区别字符串。首先,我们来看一个例子#!/bin/basha=1b=2c=`date "+%Y-%m-%d"`echo $cc=$(date "+%Y-%m-%d") echo $原创 2017-08-03 13:08:09 · 1040 阅读 · 0 评论 -
select服务器
selcetmakefileselect_server:select_server.c gcc -o $@ $^.PHONY:cleanclean: rm -f select_serverselect_server.c#include <stdio.h>#include <sys/select.h>#include <sys/types.h>#include <netin原创 2017-07-31 15:32:33 · 1197 阅读 · 0 评论 -
SEM_UNDO
当操作信号量(semop)时,sem_flg可以设置SEM_UNDO标识;SEM_UNDO用于将修改的信号量值在进程正常退出(调用exit退出或main执行完)或异常退出(如段异常、除0异常、收到KILL信号等)时归还给信号量。如信号量初始值是20,进程以SEM_UNDO方式操作信号量减2,减5,加1;在进程未退出时,信号量变成20-2-5+1=14;在进程退出时,将修改的值归还给信号量,信号原创 2017-05-21 11:28:07 · 601 阅读 · 0 评论 -
互斥锁死锁状态详解
在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为” 互斥锁” 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。那么到底怎样的情形才会产生死锁呢? 典型的两种死锁情形: (一)线程自己将自己锁住 一般情况下,如果同一个线程先后两次调用lock,在第二次调⽤用时,由于锁已经被占用,该线程会挂起等待占用锁的线程释放锁,然而锁正是被自己占用着原创 2017-06-01 01:53:16 · 10380 阅读 · 0 评论 -
生产者与消费者模型
日常生活中,每当我们缺少某些生活用品时,我们都会去超市进行购买,那么,你有没有想过,你是以什么身份去的超市呢?相信大部分人都会说自己是消费者,确实如此,那么既然我们是消费者,又是谁替我们生产各种各样的商品呢?当然是超市的各大供货商,自然而然地也就成了我们的生产者。如此一来,生产者有了,消费者也有了,那么将二者联系起来的超市又该作何理解呢?诚然,它本身是作为一座交易场所而诞生。将上述场景例比到我们实际原创 2017-06-01 01:28:12 · 618 阅读 · 0 评论 -
linux目录的权限以及ACM时间
如果创建一个目录,那么进入这个目录需要什么权限?首先呢,先建立一个文件look;然后去文件的所有权限,当进入的时候会提示没有权限; 紧接着,切换到超级用户试一试,发现依然可以进去; 切回到普通用户,增加读和写权限,发现还是不行; 增加可执行权限,发现可以进去了。 总结一下:超级用户下创建的目录,不管有没有权限,都可进入目录原创 2017-03-21 22:28:23 · 708 阅读 · 0 评论 -
ctags的安装和使用
一、如何安装两种办法:1)ubuntu系统中,终端执行: sudo apt-get install ctags或者sudo apt-get install exuberant-ctags安装成功后,终端执行ctags,会有提示:ctags --help会显示一大堆命令帮忙信息表明安装成功2)下载ctags-5.8.tar.gzi)在终端解压:tar原创 2017-03-27 23:28:14 · 1617 阅读 · 0 评论 -
vim的配置(如何配置vim)
配置vim在网上有很多种不同的复杂方法,而且没有具体说明每一步怎么做。我在这里整理了一下,希望大家配置vim的时候可以更快更 首先,如果你要配置vim,就说明你的linux上已经安装了vim,如果没有装,百度会详细回答你的问题。在这里,我详细的给大家讲解一下vim的配置。第一步:我们输入 ls -al命令(查看隐藏文件)如果有.vimrc这个文件(这个文件是有后缀名的),然后输入v原创 2017-04-06 11:23:39 · 4685 阅读 · 4 评论 -
Linux预处理、编译、汇编、链接和运行的过程(包括一些基本的命令)
在这里呢,以一个程序为例:首先呢,我们用mkdir创建一个目录;ls查看当前目录下的文件信息然后呢cd命令进入这各目录,touchfile是建立一个文件,这里呢只是说一下mkdir和touch的区别。紧接着我们进入正题:vim test.c建立一个文件打开一个文本编辑器,这里呢我已经配置好了vim,所以开头有一些多出来的信息;在这里先原创 2017-04-10 20:09:03 · 8209 阅读 · 0 评论 -
Linux进程管理之task_struct结构体详解
程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sch原创 2017-04-12 22:07:44 · 1095 阅读 · 0 评论 -
Could not connect to '127.0.0.1' (port 22): Connection failed.
本人初次尝试linux连接外网,用到了xshell5这个软件给我遇到一个关于XShell连接虚拟机中的centos系统的非常奇葩的问题,在连接的时候报错如下:因为我是第一次配置:首先我先在linux下输入:ifconfig,结果如下:然后我直接在xshell下 键入 ssh 127.0.0.1就出现了最上面的报错。为什么说奇葩呢,我在网上原创 2017-04-16 12:47:11 · 23588 阅读 · 3 评论 -
线程的创建、等待、终止以及属性
LWP:轻量级进程,因为Linux下的线程是用进程模拟的,所以它比线程大一点,比进程小一点在 Linux上线程函数位于 libpthread共享库中 ,因此在 编译时要加上 -lpthread选项。一、创建线程:thread->线程 id attr->线程属性(可分离,可结合(默认)) start_routine->创建的线程的执行流(即线程对应的原创 2017-05-23 18:53:38 · 527 阅读 · 0 评论 -
探索文件描述符(fd)与FILE结构体之间的关系
文件描述符(fd)对于linux而言,所有对设备(对于linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符用于后续对文件的读写操作;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。通常情况下,将一个程序从硬转载 2017-05-12 21:04:35 · 690 阅读 · 0 评论 -
Shell重定向
1. 标准输入,标准输出与标准错误输出Linux下系统打开3个文件,标准输入,标准输出,标准错误输出。标准输入:从键盘输入数据,即从键盘读入数据。标准输出:把数据输出到终端上。标准错误输出:把标准错误输出到终端上。默认的标准输入指的是键盘,默认的标准输出与标准错误输出指的是屏幕或者是终端。系统为这三个文件分配了文件标识符fd(file descripter).在Linu原创 2017-05-12 21:11:22 · 379 阅读 · 0 评论 -
atexit函数详解
函数名: atexit 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(void)); 注意:atexit()注册的函数类型应为不接受任何参数的void函数,exit调用这些注册函数的顺序与它们登记时候的顺序相反。对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来原创 2017-04-22 17:18:24 · 4541 阅读 · 0 评论 -
孤儿进程和僵尸进程
一、定义:什么是孤儿进程和僵尸进程僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程将会导致资源浪费,而孤儿则不会。子进程持续10秒钟的僵尸状转载 2017-04-22 18:49:15 · 441 阅读 · 0 评论 -
管道容量以及管道底层缓冲区如何组织
一.管道容量:管道容量分为pipi capacity 和 pipe_buf .这两者的区别在于pipe_buf定义的是内核管道缓冲区的大小,这个值的大小是由内核设定的,这个值仅需一条命令就可以查到;而pipe capacity指的是管道的最大值,即容量,是内核内存中的一个缓冲区。pipe_buf: 命令:ulimit -a在终端输入该命令就会出现如下一表:管道容原创 2017-05-18 09:57:21 · 3515 阅读 · 0 评论 -
linux进程通信之消息队列
下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消转载 2017-05-18 10:18:37 · 460 阅读 · 0 评论 -
使用gdb和core dump如何快速定位到段错误
这篇文章主要介绍的就是在产生段错误时如何快速定位到错误的位置? 一.一个简单的关于段错误的实例 [cpp] view plain copy#include #include void handler(int sign) { printf("pid is %d,signnum is %d\n"原创 2017-06-05 12:24:19 · 5007 阅读 · 0 评论 -
阻塞信号
一,信号在内核中的表示1,在此之前,必须先了解几个概念: 信号递达(Delivery):实际执行信号处理的动作。 信号未决(Pending):信号从产生到递达之间的状态。 信号阻塞(Block):被阻塞的信号产生时将保持在未决状态,直到 进程解除对此信号的阻塞,才 执行递达的动作。注意:信号阻塞和信号忽略是不同的。只要信号被阻塞就不会递达,除非解除阻塞,而忽略是在递达之原创 2017-06-05 12:54:13 · 833 阅读 · 0 评论 -
poll->epoll服务器
pollmakefilemypoll:mypoll.c gcc -o $@ $^.PHONY:cleanclean: rm -f mypollmypoll#include <stdio.h>#include <poll.h>int main(){ struct pollfd ev; ev.fd = 0; ev.events = POLLIN;原创 2017-07-31 15:36:38 · 1075 阅读 · 0 评论