linux
文章平均质量分 68
mignatian
这个作者很懒,什么都没留下…
展开
-
linux下常用命令解析
01.ls指令语法:ls+项目或目录文件功能:对于目录,列出该目录下所有的子目录与文件。对于文件,将列出文件名及其其他信息。常用的选项有:-a列出目录下所有文件,包括以 . 开头的隐藏文件。-d将目录像文件一样显示,而不是显示其下面的文件。-l列出文件的详细信息。-r对目录反向排序。-t以时间排序。-R列出所有子目录下的文件(递归方式)-1一行只输出一个文件。02 . pwd指令功能:显示用户当前...原创 2018-03-05 23:01:40 · 206 阅读 · 0 评论 -
Linux(二十一)编写TCP服务器(多线程版本)
server.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <pthread.h>#include <sys/socket.h>#include <netinet/in.h>原创 2018-06-06 16:15:17 · 272 阅读 · 0 评论 -
Linux(十八)网络基础:深入认识UDP(编写UDP服务器)
UDP协议端格式 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度; 如果校验和出错,就会直接丢弃UDP特点UDP传输的过程类似于寄信 *无连接:知道对短的IP和端口号就可以直接进行传输,不需要建立连接; *不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息; *面向数据报:不能够灵活的控...原创 2018-05-30 11:38:39 · 681 阅读 · 0 评论 -
Linux(十七)网络基础:网络编程套接字
理解源IP地址和目的IP地址在IP数据包头部中,有两个IP地址,分别叫做源IP地址,和目的IP地址认识端口号端口号是传输层协议的内容 端口号是一个2字节十六位的整数 端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理; IP地址+端口号能被标识网络上的某一台主机的某一个进程 一个端口号只能被一个进程占用 一个进程可以绑定多个端口号,但是一个端口号不...原创 2018-05-29 16:33:18 · 209 阅读 · 0 评论 -
Linux(十六)网络基础:网络初识
网络协议初识协议分层: OSL七层模型 * OSL七层网络模型称为开放式系统互连参考模型,是一个逻辑上的定义和规范 * 把网络从逻辑上分为了七层,每一层都有相关,相对应的物理设备,比如路由器,交换机。 * OSL七层模型是一种框架性的设计方法,其最主要功能就是帮助不同类型的主机实现数据传输; * 它的最大优点是将服务,接口和协议这三个盖面明确的区分开来,概念清楚,理论也就比较完整,通...原创 2018-05-29 14:18:41 · 456 阅读 · 0 评论 -
Linux(十五)进程间关系和守护进程
进程组/作业/会话1.进程组 每个进程除了进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,他们与一个作业相关联,可以接受来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要某个进程组中一个进程存在,则该进程组就存在,这与其组长进程...原创 2018-05-21 17:07:47 · 184 阅读 · 0 评论 -
Linux 浅析线程死锁
所谓的线程死锁就是指多个线程因为竞争资源而造成的一种僵局,一个线程不停的申请锁,释放锁,从而不给另外的线程,获得资源的机会,这就是死锁问题。若没有外力的作用,那么这些线程偶会卡到这里无法推进。产生死锁的必要条件:1:互斥条件:进程要求对分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所占有,此时若有其他进程请求该资源,则请求进程只能等待 2:不剥夺条件:进程所获得资源在未使用完...原创 2018-05-18 16:07:23 · 402 阅读 · 0 评论 -
Linux(十四)线程控制(gdb调试多线程程序)
GDB默认支持调试多线程,跟主线程 查询线程:info threads 切换调试线程: thread +线程编号 测试函数#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <pthread.h>v...原创 2018-05-17 17:28:22 · 500 阅读 · 0 评论 -
Linux(十三)线程(信号量与生产者与消费者模型)
在前面的进程控制里面我们说到了System V版本的信号量,主要用于进程控制。同样,线程控制里面也有相应的信号量,它用于线程间同步,就是我们下面要讲的Posix信号量 说到信号量,我们都明白,信号量就相当于一个计数器,它的目的是为了保护临界资源,通过信号量的P,V操作,就可以对临界资源的数目进行修改POSIX信号量 初始化信号量#include<semaphore.h>...原创 2018-05-17 16:57:35 · 1214 阅读 · 0 评论 -
Linux(二十二)浅析应用层协议HTTP
HTTP协议格式HTTP请求 ·首行:【方法】+【url】+【版本】 ·Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 ·Body:空行后面的内容都是Body,Body允许为空字符串。如果Body存在,则在Header中会有一个Conten-Length属性来表示Body的长度;HTTP响应 ·首行:【版本号】+【状态...原创 2018-06-21 16:01:15 · 300 阅读 · 0 评论 -
Linux(十九)网络基础:编写简单的TCP服务器
首先我们来说用到的函数socket#include <sys/types.h>#include <sys/socket.h>int socket(int domain,int type,int protocol);*socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符; *应用程序可以像读写文件一样用read...原创 2018-05-31 14:11:37 · 5213 阅读 · 1 评论 -
Linux(二十九)浅析数据链路层
用于两个设备(同一种数据链路节点)之间进行传递以太网*“以太网”不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。 *以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;以太网帧格式 *源地址和目的地址是指网卡的硬件地址也叫MAC地址,昌都市四十八为,是在网卡出厂时固化的; *帧协议类型字段有三种值分别对应IP...原创 2018-06-24 21:29:46 · 924 阅读 · 2 评论 -
Linux(二十八)浅析网络层协议(IP)
基本概念主机:配有IP地址,但是不进行路由控制的设备; 路由器:既配有IP地址,又能进行路由控制; 节点:主机和路由器的统称;协议头格式*四位版本号:指定IP协议的版本,对于IPv4来说,就是4。 *四位首部长度:IP头部的长度是多少个32bit,也就是length*4的字节数,4bit表示最大的数字是15,因此IP头部最大长度是六十字节。 *八位服务类型:三位有限权字...原创 2018-06-24 18:35:12 · 336 阅读 · 0 评论 -
Linux(二十)编写简单的TCP服务器(多进程版本)
上一篇我们讲的TCP服务器的简单实现是只有一个进程连接的情况,但是实际上,这是不现实的,所以我们要改进我们的程序,使其可以服务于多个进程 直接上代码server.c#include &amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;lt;sys/socket.h&amp;amp;amp;amp;gt;#include &原创 2018-06-02 10:18:07 · 467 阅读 · 0 评论 -
Linux(二十七)TCP的粘包问题
TCP面向字节流创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接收缓冲区; *调用write,数据会先写入发送缓冲区中; *如果发送的字节数太长,会被拆分成多个TCP的数据包发出; *如果发送的字节数太短,就会现在缓冲区里等着,等到缓冲区长度差不多了,或者其他合适的时机发送出去; 接收数据的时候,数据也是从网卡驱动程序到达内核的接收缓冲区; 然后应用程序可以调用r...原创 2018-06-23 14:48:41 · 1097 阅读 · 2 评论 -
Linux(二十六)TCP的高效性体现
TCP提高高效性的方法*滑动窗口 *快重传 *延迟应答 *捎带应答滑动窗口上一篇我们说了确认应答机制,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点就是性能较差,尤其是数据往返的时间较长的时候 既然这样一收一发的方式性能较低,那么我们一次发送多条数据,就可以大大的提高性能(其实是将多个段等待时间重叠在一起了)。*...原创 2018-06-23 13:58:48 · 457 阅读 · 0 评论 -
Linux(二十五)TCP的可靠性体现
TCP保证可靠性的方式*校验和 *序列号 *确认应答 *超时重发 *连接管理 *流量控制 *拥塞控制校验和TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证,其目的就是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动,如果接受方检测到校验和有差错,那么TCP段会被直接丢弃。 TCP校验和覆盖TCP首部和TCP数据确认应答(ACK)机制T...原创 2018-06-23 11:55:23 · 340 阅读 · 0 评论 -
Linux(二十四)TCP的三次握手与四次挥手
三次握手服务器在开始的时候,调用socket()函数分配一个文件描述符,然后是填充本地sockaddr_in结构体信息,绑定分配的文件描述符和服务器地址端口,下面就开始建立监听描述符,调用listen函数,使刚才的文件描述符成为一个监听描述符, 然后就是阻塞等待客户端连接; 客户端做的工作就是分配一个文件描述符,填充sockaddr_in信息,然后调用connect函数向服务器发起连接...原创 2018-06-22 14:23:20 · 247 阅读 · 0 评论 -
Linux(二十三)浅析传输层协议(UDP,TCP)
传输层 负责数据能够从发送端传输接收端端口号 端口号标识了一个主机上进行通信的不同的应用程序在TCP/IP协议中,用“源IP”,“源端口号”,“目标IP”,“目标端口号”,“协议号”这样一个五元组来表示一个通信 (可以通过netstat -n查看)cat /etc/services查看知名端口号,我们在写一个程序使用端口号时,要避开这些知名端口号一个进程可以绑定多个端口号...原创 2018-06-22 10:31:32 · 415 阅读 · 0 评论 -
Linux (十二)线程同步于互斥
线程的同步与互斥mutex(互斥量) 大部分情况,线程使用的数据是局部变量,变量的地址空间在线程栈空间内,这种情况,变量附属单个线程,其他线程无法获得这种变量。 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互 多个线程并发的操作共享变量,会带来一些问题。 这个时候我们会发现问题,票数会出现负数,因为操作不是原子的,而是对应三...原创 2018-05-03 18:49:37 · 131 阅读 · 0 评论 -
Linux (十一) 线程控制(线程的创建,等待,分离)
POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数名字都是以“Pthread_”打头的 要是用这些函数库,要通过引入头文件 连接这些线程函数库时要使用编译器命令的“-lpthread”选项创建线程int pthread_creat(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine...原创 2018-04-25 16:45:10 · 136 阅读 · 0 评论 -
Linux进程(三)程序替换(编写myshell)
进程程序替换看到进程我们首先就要想到PCB。每一个程序从磁盘加载到内存里就变成了一个进程,而每一个进程都有自己的PCB,在这个结构体里有着自己的虚拟地址空间,存在于虚拟地址空间的数据和代码的地址都会通过一个叫页表的东西映射到物理内存上。 替换原理: 用fork创建子程序后执行的是和父进程相同的程序(但是有可能执行不同的代码分支)子进程往往要调用一种exec函数来执行另一个程序。当进程调用一...原创 2018-03-28 09:24:45 · 432 阅读 · 0 评论 -
Linux进程(二)进程创建,等待,终止
进程创建fork函数初识 在Linux中fork函数是非常重要的函数,它从已存在的进程中创建一个新进程。新进程就是子进程,而原来的进程就是父进程。 当一个进程调用fork之后,就有两个二进制代码相同的进程。而且他们都运行到相同的地方,但每个进程都可以开始他们自己的旅程。fork函数的返回值子进程返回0; 父进程返回的是子进程的pid。数据写时拷贝 通常,父子代码共享,父子再...原创 2018-03-27 19:21:45 · 280 阅读 · 0 评论 -
Linux进程(二上)环境变量和程序地址空间
环境变量基本概念 *环境变量一般是指在操作系统中用来制定操作系统运行环境的一些参数,如:我们在编写c/c++代码的时候,在连接的时候,我们从来不知道所连接的动态静态库在哪里,但是照样可以连接成功,生成可执行程序,原因就是有相关的环境变量帮助编译器进行查找 *环境变量通常具有某些特殊用途,在系统红通常具有全局特性常见的环境变量 PATH* :指定命令的搜索路径 HOME* :指定用户...原创 2018-04-01 20:30:39 · 382 阅读 · 0 评论 -
单向不带头结点不带环的链表实现
链表有很多种类,单向,双向,不带头,带头,不带环,带环,结合起来一共可以有八种链表形式;今天我们来实现一种名字叫 单向不带头不带环的链表下面就是每一部分的代码实现首先我们要做的就是函数的声明,结构体的定义,头文件的引用#pragma once#define HEADER printf("\n----------%s------------\n",__FUNCTION__)#...原创 2018-03-25 17:38:40 · 212 阅读 · 0 评论 -
进度条的实现
当我们加载一些东西或者下载文件的时候就会出现一个叫进度条的东西下面我们就来看看如何实现进度条首先我们要知道,进度条里面是有字符的,就像一个数组一样,我们每次打印数组里面一个元素,不换行,当打印出来一百个的时候我们就可以打印结束,进度条就满了。那么具体如何实现呢,请看下面的代码:#include<stdio.h>#include<stdlib.h>#include<...原创 2018-03-14 10:50:22 · 1956 阅读 · 1 评论 -
linux下的一些重要目录
/proc:它是一个文件系统,在运行时访问内核内部数据结构、改变内核设置机制。proc下面有很多数字文件夹,这些数字代表的是进程,因为Linux系统下一切皆文件。/sys :它是在/proc下面的一个重要目录。/sys目录是可写的,/sys的设计原则是一个属性问价只做一件事情,/sys属性的文件一般只有一个值,直接读取或者写入。/SELinux是2.6版本的Linux内核中提供的强制访问控制(MA...原创 2018-03-17 10:14:35 · 180 阅读 · 0 评论 -
Linux下权限的理解
Linux下有两种用户:超级用户(#)、普通用户($)。两个用户可以切换,用su root或su 用户,其中切换root用户需要输入密码。01.文件访问者的分类*文件和文件目录的所有者:u-user*文件和文件目录的所有者所在的组的用户:g-group*其他用户:o-others02.文件访权限的种类*r:读属性,对文件来说,具有可以读取文件内容的权限;对目录来说,具有浏览该目录信息的权限*w:对...原创 2018-03-09 00:25:28 · 409 阅读 · 0 评论 -
Linux下shell简介
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接受用户输入的命令并把它送入内核去执行。实际上shell是一个命令解释器,它解释由用户输入的命令并且把他们送到内核。不仅如此,shell由自己的编程语言用于对命令的编辑。举一个有趣的例子:在整个系统下 shell就像是一个媒婆一样,用户就像是一个相亲对象,想把自己的想法告诉另一个相亲对象,就要从媒婆这个媒介透漏给系统,系统知道了...原创 2018-03-07 11:27:29 · 423 阅读 · 0 评论 -
linux (五)进程间通信(匿名管道,命名管道,消息队列)
进程间通信进程间通信的目的 数据传输:一个进程需要将他的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源 通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某种事件(如进程终止时要通知父进程) 进程控制:有写进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够即使知道他们的状态改变。进程间通信分类 管道: 匿名管道 ...原创 2018-04-16 10:53:06 · 868 阅读 · 0 评论 -
Linux(三)文件描述符和FILE结构体
文件描述符在我们介绍文件描述符之前。我们先来看一下 系统调用接口:write,read,close,open,lseek,下面我们来尝试用下open系统调用接口。 我们可以看到,我们通过open创建一个文件给它权限0644 接下来我们写一个while循环通过write系统调用将我们的msg写进myfile这个文件里 open参数的介绍: O_RDONLY:只读打开 O_WR...原创 2018-04-11 13:53:14 · 1843 阅读 · 1 评论 -
Linux (十)线程的基本概念
什么是线程? 在一个程序里的一个执行路线就叫做线程。更准确的定义是:线程是一个进程内部的控制序列 一切进程至少有一个执行线程进程和线程 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,与其他线程共享一块虚拟地址空间,但是也拥有自己的一部分数据:线程ID,一组寄存器,栈,ERRNO,信号屏蔽字,调度优先级一进程的多线程共享 同...原创 2018-04-21 11:27:46 · 132 阅读 · 0 评论 -
Linux(九)进程信号(gdb调试多进程程序)
因为在默认设置下,在调试多进程程序的时候GDB只会调试主进程。其实GDB可以同时调试多个程序,但是想要调试还要设置fllow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)parent on 只调试主进程child on 只调试子进程parent off 同时调试两个进程,...原创 2018-04-25 11:38:35 · 253 阅读 · 0 评论 -
linux (七)进程间通信(信号量)
在上篇博客说的共享内存是没有同步与互斥的!但是今天说的信号量主要用于同步和互斥我们先来看看什么是进程互斥由于各进程要求共享资源,而有些资源需要互斥使用,因此个进程间的竞争使用这些资源,进程的这中关系叫做进程的互斥 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源 在进程中涉及到互斥资源的程序段叫做临界区举例说明进程的同步与互斥实例 互斥:在电影院买票当一个进...原创 2018-04-20 17:46:45 · 760 阅读 · 0 评论 -
Linux (九)进程信号(进程中信号处理实例,可重入函数)
上篇博客我们说了闹钟函数alarm和pause函数,我们将他们结合起来写一个mysleep#include<stdio.h>#include<signal.h>#include<unistd.h>void sig_alrm(int signo){}unsigned int mysleep(unsigned int nsecs){ ...原创 2018-04-24 16:16:30 · 613 阅读 · 0 评论 -
Linux (六)进程间通信(共享内存)
上篇博客我们讲了,匿名管道,命名管道,消息队列,并使用了他们,初步了解了进程间通信的概念。下面我们要说共享内存。共享内存函数 shmget函数 功能:用来创建共享内存 原型 int shmget(key_t key,size_t size,int shmflg); 参数 key:这个共享内存段名字 size:共享内存大小 shmflg:由九个权限...原创 2018-04-19 18:15:37 · 710 阅读 · 0 评论 -
Linux (八)进程信号(信号产生,阻塞信号,捕捉信号)
信号的基本概念为了理解信号,举一个我们熟悉的例子 用户输入命令,在shell下启动一个前台进程 用户按下CTRL-C,这个键盘输入产生一个硬件终端 如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断 终端驱动程序将CTRL-C解释成一个SIGINT信号,记在该进程的PCB中,当某个时刻要从内核返回到该进程的用户空间代码继续执行之...原创 2018-04-23 16:20:46 · 863 阅读 · 0 评论 -
linux(四)理解文件系统和对静态库和动态库的理解
我们使用ls-l的时候看到的除了看到文件名,还看到文件的元数据拥有的权限 硬链接数 文件所有者 组 大小 文件最后修改时间 文件名ls-l读取存储在磁盘上的文件信息,然后显示出来 其实这个信息除了通过这种方式来读取,还有一个sata命令能够看到更多的信息 上面的执行结果有几个信息需要解释一下 inode 为了能解释清楚inode我们先了解下文件系统 超级块:存...原创 2018-04-12 19:43:30 · 250 阅读 · 0 评论 -
Linux 进程(一下)进程优先级
进程优先级基本概念 * CPU资源分配的先后顺序,就是进程的优先权 * 优先权高的进程有优先执行的权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能。 * 还可以吧进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统的整体性能。查看系统进程 在Linux或者nuix系统中,用ps-l命令则会类似输出一下几个内容: 在这里我们可以...原创 2018-03-29 10:00:08 · 3121 阅读 · 0 评论 -
LinuxVFS虚拟文件系统(图)
需要原图的可以联系我原创 2018-08-14 20:18:52 · 592 阅读 · 0 评论