
Linus
f2016913
一个专业小白的奋斗之路
展开
-
linus下touch指令对时间影响
一:touch->a 文件名修改atime,也会改变ctime。二:touch ->c文件名我们再创建一个新文件观察结果:三:touch -->d将atime和mtime更新为指定时间,而ctime为当前时间四:touch -->m将atime为当前时间,由于改变mtime而ctime发生改变。五:touch -->t 文原创 2017-03-29 01:01:33 · 368 阅读 · 0 评论 -
网络基础知识
一:协议: 日常生活中我们经常我听到各种各样的口头上的协议,比如拔河比赛,大家一起按照首先约定好的口号,123一起发力等等这样的栗子不胜枚举,我们把双方之间的约定就叫做协议,当前在网络当中也有各种各样的协议.为了更好的理解他们我们先从网络的分层开始. 二:到底是7层还是4层? 目前我们所熟知的有OSI(开放系统互联)七层模型,还有就是非常有名的TCP/IP协议. 为什么要分层呢? 分层的目原创 2017-07-03 14:31:45 · 624 阅读 · 0 评论 -
TCP的四种定时器
在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的。在TCP中,会有四种定时器: (1)重传定时器 (2)坚持定时器 (3)保活定时器 (4) 时间等待计时器 这四个定时器都有各自的具体作用。 一:重传定时器 重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报原创 2017-07-13 09:07:16 · 491 阅读 · 0 评论 -
生产者和消费者模型
一:条件变量: 我们知道多线程访问时会出现冲突的问题,为了解决这个问题我们引入互斥锁的概念,即多个线程同时访问理解资源时,获得锁多线程可以完成”读-修改-写”操作,然后释放锁给其他线程.没有获得锁的线程只能挂起等待. 与互斥锁不同,条件变量时挂起等待而不是上锁,条件变量用来自动阻塞一个线程,直到某特殊情况的发生,通常条件变量和互斥锁同时使用. 原理:条件变量是利用线程间共享的全局变量进行同步的原创 2017-06-24 17:01:53 · 485 阅读 · 0 评论 -
信号阻塞
一:关于信号的几种状态 1:信号递达:实际执行信号的处理动作称为信号递达 2:信号未决:,从产生到递达之间的状态称为未决状态.进程可以选择阻塞某个信号,被阻塞的信号产生时将保持未决状态,直到进程解除对次信号的阻塞,才执行递达的动作. 注意,阻塞和忽略是不同的,只要信号被阻塞就不会被递达,而忽略是在递达之后可选的一种处理动作. 我们可以画图来表示信号在内核中的表示 每个信号都有两个标志位分别原创 2017-07-06 10:31:47 · 630 阅读 · 0 评论 -
线程安全和可重入函数
一:什么是线程安全? 就是所如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码,如果每次运行的结果是一样的,而且其他变量的值和预期的是一样的,就是线程安全的.或者说一个程序锁提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口执行结果的二义性,也就是我们不用考虑二义性.下面这几个条件可以判断线程是不安全的: 1:函数中访问全局变量和堆 2:函数中分配,重原创 2017-07-06 16:27:10 · 712 阅读 · 0 评论 -
进程间通信--消息队列
一:什么是消息队列? 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.每个数据块都被认为是一种类型,接受者进程接收的数据块可以有不同的类型值.我们可以通过发送消息来避免命名管道的同步与阻塞问题.消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的.且消息队列的读取不一定是先入先出. 缺陷是:每个消息的最大长度是有限的(MSGMAX),每个消息 队列的总的字节数是有上限原创 2017-07-08 09:33:41 · 1014 阅读 · 0 评论 -
gdb调试多线程
一:调试 我们知道在Windows下我们常用 F5调到断点处 ,F9设置断点或者取消断点,F 10开始调试或单步执行 F11进入函数内部 F7编译 Ctrl+F10调到函数内部 当然有时我们也会使用调试窗口或者查看栈帧来进行调试. Linux下调试我们通常使用gdb(代码调试工具) 注意在写Makefile文件时,要加上-g 1:开始调试gdb filename 2:l 1其原创 2017-07-20 20:40:54 · 811 阅读 · 0 评论 -
一个fork的面试题
题目: 请问下面的程序一共输出多少个”-“#include<stdio.h>#inlcude<unistd.h>int main(){ int i; for(i =0;i<2;i++) { fork(); printf("-"); }return 0;}可能开始的时候大家都以为会输出6个”-“,但是结果输出了8个”-“. 要弄明白这个题,还是先从fork()调用开始原创 2017-07-17 20:07:03 · 443 阅读 · 0 评论 -
进程间通信--信号量
信号量的本质 是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标志,信号量在此过程中负责数据操作的互斥,同步等功能. 一:为什么要使用信号量 为了防止因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任意一时刻只能有一个执行线程访问代码的临界区域.临界区域是指原创 2017-07-09 16:21:02 · 478 阅读 · 0 评论 -
CRC校验
一:什么是CRC? CRC即循环冗余校验码:是数据通信领域中最常用的一种差错校验码,器特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将结果附在帧的后面,接受设备也执行类似的算法,以保证数据传输的正确性和完整性.二:常见的校验方法:1:奇偶校验 设置奇偶校验位,所谓的奇偶校验就是在发送的每一个字节后加上一位,是的每个字节中的1的个原创 2017-07-09 16:27:43 · 1090 阅读 · 0 评论 -
浅谈ARP
一:ARP的原理: 我们知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址阿里传输以太网数据包的,但是它们却识别不了IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使数据包能发到一个确定的地方去,这就是ARP(地址解析协议)1:ARP数据报格式 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知原创 2017-07-10 11:46:26 · 745 阅读 · 0 评论 -
TCP报文段中的URG和PSH
一:TCP报文段的首部格式 首先明白TCP虽然是面向字节流的,但TCP传输的数据单元确实报文段,一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中的个字段的作用,因此只有弄清楚TCP首部个字段的作用才能掌握TCP的工作原理. TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项,,因此TCP首部的最小长度是20字节 二:首部固定部分各字段的意义:(原创 2017-07-12 10:42:48 · 1595 阅读 · 0 评论 -
进程间通信--管道
我们知道进程都有各自不同的地址空间,任何有一个进程的全局变量在在另外一个进程都看不到的,所以进程之间交换数据时在内核进行,通俗的说A进程把数据拷贝到内核,B进程从内核中把数据读走,我们把内核提供的这种机制叫做进程间通信,(IPC). 管道: 管道:(pipe) 管道是一种基本的ipc机制,由pipe函数创建;#include<unistd.h>int pipe(int filedes[2原创 2017-06-11 14:08:14 · 382 阅读 · 0 评论 -
Linus下find指令
一:find指令Linus下find指令在目录结构中搜索文件;并执行指定的操作;1--命令格式find pathname -options[-print -exec -ok ..]2--命令功能用于文件树中查找文件,并做出相应的处理3--命令参数pathname:find命令查找的目录路径,用.表示当前目录,用/表示系统目录。当我们在Linus下用find . te原创 2017-03-29 13:07:51 · 729 阅读 · 0 评论 -
Linus下的权限设置
一:Linus下的权限管理: 1:文件访问者的分类: a )文件和文件目录的所有者 u –User b )文件和文件目录的所有者所在的组的的要不过户 g–Group2:文件访问权限的种类 基本权限: a )读( r/4 )–read对于文件来说,具有读取文件内容的权限,对于目录来说具有浏览该目录信息权限。 b)写( w/2 )– write对于文件来说,具有修改文件内容的权限,对于目录来原创 2017-03-27 13:47:04 · 416 阅读 · 0 评论 -
linus下Access time和Modify time 和 Change time的区别
一:stat指令下Access和Modify和Change的区别: Access 指最后一次读取的时间 Modify 指最后一次修改数据的时间 Change 指最后一次修改原数据的时间 我们以text.c为例: 二:touch指令对时间的影响 touch+filename: 1:当前目录下不存在时,touch可以创建一个新的名字为filename的文件; 2:当前目录下存在名原创 2017-03-27 13:59:06 · 1054 阅读 · 0 评论 -
进程task_struct结构体
(1):什么是进程? 每个进程在内核中都有一个进程控制块(pcb)来维护进程相关的信息,Linus内核的进程控制块是task_struct的结构体; Linus主要的进程状态有以下几种: (2):进程标示符 进程id( PID); 父进程id(ppid) (3):进程的内核段 1:void *stack//用来维护进程的内核栈 (4):进程的标记:unsigned int fla原创 2017-04-16 21:05:42 · 355 阅读 · 0 评论 -
线程死锁
一:mutex(互斥量) 多个线程同时访问共享数据时可能会冲突,比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 1:从内存读取变量值到寄存器 2:寄存器的值加1 3:将寄存器的值写回内存 如:我们创建两个线程,各自把全局count增加5000,我们希望最后的count应该是10000次,可是每次运行的结果都不一样.如:#include<stdio.h>#inc原创 2017-06-06 17:51:15 · 478 阅读 · 0 评论 -
NAT技术及其应用
一:概念: 共有IP:也叫全局地址,是指合法IP地址,它是由NIT(网络信息中心)或者ISP(网络服务提供商)分配的地址,对外代表一个或多个内部局部地址,是全球统一的可寻址的地址. 私有IP地址:也就内部地址,属于非注册地址,专门为组织机构内部使用,因特网分配编写委员会,保留了3块IP地址做为私有IP地址: 10.0.0—-10.255.255.255 172.16.0.0—172.16.2原创 2017-07-10 22:52:09 · 1345 阅读 · 0 评论 -
作业,进程组,终端
1:进程组: 每一个进程除了有一个进程ID,还属于进程组.进程组是一个或者多个进程的集合.通常,它们与同一作业相关联,可以接收来自同一终端的各种信号.每个进程组有一个唯一的进程组ID,每个进程组都可以有一个组长进程.组长进程的标志是,其进程组ID等于其进程ID. 组长进程可以创建一个进程组,创建该组中的进程,然后终止.只要在某个进程组中一个进程存在,则该进程组就存在,这与组长进程是否终止无关.函原创 2017-07-01 10:23:25 · 406 阅读 · 1 评论 -
路由表的生成算法
一:几个概念 1:路由器: 是连接因特网中的个局域网,广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号.路由器又称网关设备是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网,当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成.因此,路由器具有潘丹网络地址和选择IP路径的功能,它能在多个网络互联的环境中,简历灵活的连接,可用原创 2017-07-11 11:32:28 · 1562 阅读 · 0 评论 -
信号
一:信号: 日常生活中,我们会遇到很多信号,比如放学回家看到红灯(信号),我们的”反应”是停下来.早上当闹铃响的时候我们大多数情况是选择”关了”继续睡,或者选择”无视”.总是生活中有者各种各样的形形色色的”信号”. 简单的说所谓的信号是看到(识别),并且做出反应的行为称为信号.当然我们也可以通过指令查看信号 kill-l可以查看所有进程 二:产生信号的条件: 1:用户在终端按下按下某些键时原创 2017-07-01 14:33:06 · 994 阅读 · 0 评论 -
守护进程
一:线路规程 先给一个简单的栗子: 我们在终端下按下字母aaaaaa在bash下会显示aaaaa,但当我们按下组合键Ctrl-C,为什么却没有显示Ctrl-C呢? 这就是线路规程干的好事,那么什么是线路规程,简单点说就是就是内核层面的过滤器. 键盘输入的数据被驱动程序提交给线路规程,当输入的普通字符,线路规程不会做任何处理,默认让它通过,而当输入的是组合键时被解释成信号.这就很容易解原创 2017-07-02 12:16:10 · 715 阅读 · 0 评论 -
端口与服务
一:概念 在网络技术中,端口包括逻辑端口和物理端口两种类型, 物理端口是指物理存在的端口如:集线器,交换机,路由器上用于连接其他网络设备的接口. 逻辑端口:是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口, 端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口数量较多,为了对端口进行区分,将每个端口进行了编号,这就是端原创 2017-07-11 22:34:12 · 4550 阅读 · 0 评论 -
linux线程
一:线程的概念: 我们回到进程在过日子独立的地址空间运行,进程间公用护具需要用mmap或者进程间通信机制,我们也知道线程其实就是进程的一个执行分支,同一个进程的多个线程它们公用着进程的地址空间。因此数据段,和全局变量都是共享的。出IC之外各线程还共享一下进程资源和环境: 1:文件描叙符表file_struct; 2:每种信号的处理方式(SIG_IGN,SIG_DFL或者自定义的信号处理函数)原创 2017-06-05 14:51:21 · 630 阅读 · 2 评论