
Linux
doctor_xiong
喜欢天空一般的简约白!
展开
-
【Linux】基础IO(下)!!!
在C库里面的IO函数在底层也是通过调用系统的IO函数来实现的。因为在系统IO函数里面是通过fd(文件描述符)实现的,所以在C库里面是将fd(文件描述符)进行了封装。在C库函数向显示器输出的时候是行缓冲,但是在向文件输出的时候是全缓冲,因为在系统提供的函数里面是没有自带缓冲区的,所以在C库函数封装的时候提供的。int main(){ char * buf = "haha\n"; f原创 2018-01-15 17:26:41 · 237 阅读 · 0 评论 -
【Linux】线程控制!!
在Linux里面线程被称为轻量级线程,而线程的退出有以下几种方法:线程调用return函数返回,但是在主线程里面不适用,因为主线程里面调用return函数相当于在主线程里面调用exit函数。线程调用pthread_exit函数退出线程调用pthread_cancel函数终止同一个进程里面的其他线程在系统的角度来看待线程是没有具体的结构的,在系统的眼里只有进程。所以线程和进程一样...原创 2018-03-31 21:54:26 · 211 阅读 · 0 评论 -
【Linux】线程的互斥与同步!!
在系统里面线程的资源不同于进程的资源,进程在系统里面是一个一个的单独个体,但是线程的资源大部分是共享的,所以在线程访问问一个临界资源的时候需要同步与互斥机制,从而保证在多线程的程序里main不会出现问题。模拟实现售票系统:int tacket = 100;void* sell_tacket(void* arg){ while(1){ if(tacket >...原创 2018-04-01 22:45:02 · 184 阅读 · 0 评论 -
【Linux】malloc和free底层的简单实现!!!
从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(当然在这里是不考虑共享内存)brk是将数据段(.data)的最高地址指针_edata往高地址推;mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。 注:在开辟空间的时候只是在进程的虚拟地址空间内开辟指定大小的内存,但是并没有实际在物理内存上面开辟空间,只有当对...原创 2018-04-15 12:19:12 · 1225 阅读 · 0 评论 -
【Linux】进程组、作业、回话、守护进程的基本概念!!
进程组 每一个进程在创建的时候就有自己的进程ID,同时也有自己的ID(PGID)。一个进程组,可以含有一个或者多个进程,进程组也有自己的ID,通常是进程组里面第一个进程的ID。 进程组的特点:每一个进程组有一个组长进程,进程组长的ID等于进程组ID进程组长可以创建进程组、创建进程组里面的进程只要进程组里面含有进程,那么进程组就存在,这与进程组长的存在没有关系进程组里面的最后一个进程...原创 2018-04-15 21:24:11 · 403 阅读 · 0 评论 -
【linux】线程的基本概念!!!
在linux里面是没有实际的线程的结构,但是在linux里面为了描述线程,将进程分为很多的轻量级进程,这些轻量级的进程被称之为线程。两个区别:进程是系统分配资源的基本单位线程是系统调度的基本单位由于线程在进程的内部运行,那么在创建一个线程的时候需要资源和操作相对于创建进程要少的多。创建进程的过程:申请空白PCB为新进程分配资源初始化进程控制块将新创建的进程...原创 2018-03-27 22:32:06 · 357 阅读 · 0 评论 -
【Linux】死锁!!!
死锁概念 在多线程程序里面多个线程因为竞争资源而产生的僵持现象。产生死锁的四个条件互斥条件:每个资源每次只能被一个进程使用,即在一度那时间内得某资源仅为一个进程所占有。此时若有其他的进程请求该资源,则请求进程只能等待。请求与保持条件:进程已经保持了至少一个资源,但是又提出来新的资源请求,而该资源已经被其他的进程战友,此时请求进程被阻塞,但自己已获得的资源保持不放不可剥夺条件:进程获...原创 2018-04-04 22:19:34 · 593 阅读 · 0 评论 -
【Linux】多进程和多线程的调试!!
在gdb调试多线程好人多进程的程序上面,默认的是调试主程序。但是gdb是支持调试多线程和多进程的。 调试多进程 在调试多进程的时候需要设置follow-fork-mode(默认parent) 和 detach-on-fork(默认on)的值 设置方法:set follow-fork-mode [parent|child] set detach-on-fork [on|off]...原创 2018-04-05 17:06:13 · 355 阅读 · 0 评论 -
【Linux】读写锁!!
读写锁的三二一模型三:三种关系 、读者与读者之间没有关系、写者和读者互斥且同步、写者与写者之间互斥二:两种对象、读者和写者一:一个交易场所 读写锁应用的场景:在多线程程序里面,线程对临界资源的访问比较多,而对临界资源的修改较少。在读写者模型里面,由于写操作的次数比较少。那么在该模型里面的写操作的优先级必读操作的优先级高。加入读的优先级比写优先级高,那么就会出现读操作在一直读,...原创 2018-04-13 21:53:39 · 308 阅读 · 0 评论 -
【网络】网络套接字基本概念!!
IPIP地址是在IP协议里面标识网络中的不同的主机在IPV4协议里面的IP地址是4个字节,32位通常使用点分十进制来表示IP地址,即192.168.2.120,用点来区分每一位端口号 在每一台主机里面运行的进程不是唯一的,所以在进程使用网络资源的时候就需要使用一种标记来标记同一个主机里面的使用网络资源的进程,即端口号。一个进程只能占用多个端口号,但一个端口号可以被一个进程占...原创 2018-04-27 22:28:13 · 853 阅读 · 2 评论 -
【网络】TCP通讯协议里面的三次握手和四次挥手的流程!!
服务器初始化的一般过程: 调用socket 函数获取创建的文件描述符使用bind函数对IP和port进行绑定调用listen函数监听socket创建的文件描述符调用accept函数对客户端进行连接 客户端和服务器建立连接和断开连接的过程: 三次握手 过程: - 使用`socket`创建文件描述符 - 调用connect向服务器发起连接请求 - connect向...原创 2018-05-06 21:40:49 · 854 阅读 · 0 评论 -
【网络】TCP协议!!
TCP协议段结构源端口地址和目的地址:表示数据从哪个进程来,哪个进程去 32位序号:每个TCP数据包发送出去,需要序号进行编号,方便接受端正确的识别包的序号 32位确认序号:每个包发送出去需要对端确认,确认序号为了给对端发送确认序号 4位TCP报头长度:用来表示TCP首部有多少个32bit位(4字节),TCP最大长度为15*4=60 6个标志位: URG:表示紧急指针是否有效...原创 2018-05-13 22:23:41 · 353 阅读 · 0 评论 -
【网络】TCP的可靠机制!!
TCP的可靠机制确认应答ACK TCP将每一个要发送的数据进行编号,每一份发送的数据接收方就会应答确认序号。回应的序号用于告诉接收者已经接收到的数据。超时重传 如果在发送数据的时候发生丢包现象,那么发送方就不会收到接收方的ACK应答,那么在TCP里面就会在隔一定的时间就会重新发送数据。 存在的问题一担发生发送方无法接收到ACK应答的时候,在接收方就会出现很多重复的数据,TCP需要...原创 2018-05-21 22:29:00 · 596 阅读 · 0 评论 -
【网络】当在浏览器里面输入url会发生什么?
当在浏览器里面输入url会发生什么?应用层 当在浏览器里面输入url的时候,浏览器会现在本机查找url对应的IP地址,如果没有,那么就会向上一级发出DNS请求,知道找到对应的IP地址或者找到根DNS服务器。当找到对应的IP地址的时候,浏览器发出http请求,这时http请求里面包含http报头和一些相关的信息。传输层 在传输层,主要的目的是使用TCP建立可靠的连接和将应用层的数据进行分...原创 2018-05-25 22:31:24 · 791 阅读 · 0 评论 -
【网络】epoll简单概念!!
相关APIepoll_createepoll_create(int size);//创建epoll模型 注:在linux2.68之后,size被忽略 使用epoll_create创建模型的时候,内核会创建红黑树和就绪队列以及回调机制用来维护所关心的文件描述符。 红黑树的节点用来保存用户所关心的文件描述符就绪队列用来保存已经响应的文件描述符epoll_ctlepoll_ct...原创 2018-06-03 23:20:24 · 352 阅读 · 0 评论 -
【网络】select模型基本概念!!
select模型select机制 当使用read等系统调用在缓冲区里面读取数据的时候,如果和缓冲区里面没有数据,那么函数会被系统直接挂起等待,这种函数称之为阻塞式接口。如果缓冲区内一直没有数据那么该系统调用会一直阻塞,知道缓冲区内有可读数据。使用select函数的时候,select可以注册多个需要执行IO的socket,并不断的调用select读取被激活的socket,即在一个线程上面可以同...原创 2018-05-28 22:57:36 · 1949 阅读 · 3 评论 -
【网络】IP协议和ARP协议!!
IP协议和ARP协议IP协议IP协议属于网络层的协议,是一个无连接、不可靠的协议。主要的作用是在复杂的网络中寻找合适的传输路径。 IP协议的报头结构: - 版本:IP协议的版本(IPv4、IPv6) - 首部长度:IP协议的首部长度,四个字节最大为15,所以IP报头的最大长度为15*4 = 64字节 - 区分服务: - 总长度:IP报文的总长度 - 标识:当IP报文经过...原创 2018-06-01 10:35:30 · 5762 阅读 · 1 评论 -
【Linux】消费者与生产者模型!!
POSIX信号量 信号量的类型:sem_t 初始化信号量函数:int sem_init(sem_t* sem,int pthread,unsigned value); sem:信号量名 pthread:0表示线程间共享,非0表示进程间共享 value:信号量初始值 销毁信号量函数:int sem_destrpy(sem_t* sem); 等待信号量:int sem_wait(sem_...原创 2018-04-07 21:10:12 · 396 阅读 · 0 评论 -
【linux】信号的捕捉!!
在linux里面产生信号的时候并不是当信号产生的瞬间就将信号进行处理,而是当系统感到合适的时候就会将该信号进行处理。当执行用户自定义的信号处理动作的时候的信号执行过程 当执行的是用户的自定义信号处理函数的时候从内核空间返回到用户空间进行用户自定义的信号处理函数调用,当执行完用户自定义的信号处理函数的时候返回内核空间,然后再返回到用户空间继续执行进程的其他代码。int sigactio...原创 2018-03-24 16:11:38 · 289 阅读 · 0 评论 -
【Linux】配置一个强大的Vim!!
配置好的vim如图: 但是我配置的不是很强大,但是够用!!!配置vim第一步 - 进入到`~/.vimrc`这个文件里面 - 执行 `vim ~/.vimrc`进入配置文件这个文件是linux里面用户自己配置的文件。 如果自己不想一个一个配置可以使用一键配置: 直接在命令行执行 #!/bin/bash git clone --recursive https:原创 2017-11-29 11:39:34 · 14016 阅读 · 1 评论 -
【linux】常见指令---day 1
linux里面的常见指令: ls 列出当前文件夹下面的文件* -l 列出文件的全部格式信息* -a 列出文件的全部信息cd [filename]跳转到指定的文件 touch [选项] [参数] 功能1: 用于已经保存的文件的更新时间,2:创建一个新的空文件* -a值更改存取时间* -c不创建原创 2017-11-16 18:43:11 · 238 阅读 · 0 评论 -
【Linux】简单的makefile和进度条实现!!
在linux里面编译一个程序文件需要使用gcc/g++,但是在一个工程里面或许含有的不只是一个文件,那么这时候一个一个文件的编译时很耗时同时也会增大程序出错的风险。那么在linux里面可以使用make这个指令来进行对多个文件进行编译。在linux里面除了make指令可以一次将对个文件同时编译,还有shell script来将对多个问阿金的操作都集合在一起。但是,使用make有以下几点好处:* 简化原创 2017-11-28 20:28:23 · 828 阅读 · 0 评论 -
【Linux】初识进程!!!
概念:程序的一个执行实例。 在Linux里面有专门用来描述进程状态的结构task_struct,在系统内核里面。这个通常被称为PCB,着这个里面包含着这个进程的所有信息。 pid:在描述进程的结构体PCB里面有一个pid,这个是描述进程ID的,通过这个ID就可以用来区分父进程和子进程。另外,`getpid()`函数用来获得当前进程的ID,`getppid()`用来当前进程的父进程ID原创 2018-01-15 22:34:58 · 342 阅读 · 0 评论 -
【Linux】环境变量!!!
概念:在系统里面指定运行环境全局变量。在main函数里,函数原型int main(int argc,char* argv[],char* envp[]);在这个envp里面就包含着该程序所需要环境变量。#includeint main(int argc,char* argv[],char * envp[]){ int i = 0; for(;envp[i];i++原创 2018-01-18 11:11:28 · 316 阅读 · 0 评论 -
【Linux】进程控制!!!
在linux里面常用的调度算法是时间片轮转法,即每一个进程分为很多的块,每一块都只能占用CPU固定的时间,当时间到,这个进程就必须放弃对CPU的使用权限。然后CPU去执行下一个进程。 在使用fork()函数创建一个子进程的时候,父进程和子进程执行的先后顺序是不确定的,所以子进程和父进程执行行为先后次序是不确定的。但是在除开使用fork()函数的同时也可以使用vfork()来创建进程,vfork(原创 2018-01-18 17:31:25 · 662 阅读 · 0 评论 -
【Linux】find指令和grep指令!!!
find指令的grep指令都可以在指定的路径或者指定的文件里面查找指定的内容; find和grep的区别:find是在指定的路径或者目录里面查找指定的文件。grep是在指定的文件里面查找指定的内容find: find 【path】 【option】 filenamefind的可以在【path】路径里面查找指定的文件名。 例如: 常用的选项:-name原创 2018-02-03 18:04:27 · 634 阅读 · 0 评论 -
【借阅】正则表达式!
正则表达式 - 语法正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。例如:runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。runoo*b,可以匹配 runob转载 2018-02-04 19:22:46 · 259 阅读 · 0 评论 -
【Linux】进程终止方式--exit的调用过程!!!
在linux里面的进程终止的方法有8种。 五种正常终止:从main函数返回调用exit函数调用_exit或者_Exit最后一个线程从启动实例返回从最后一个线程调用pthread_exit三种议程终止:调用abort函数接收到一个终止信号最后一个线程对取消请求做出响应exit的调用过程 函数原型:void exit(int status); 在调用一个函数...原创 2018-02-12 21:33:18 · 2180 阅读 · 0 评论 -
【Linux】设计模式---单例模式
概念:单例模式即在单例类实例化对象的时候只能实例化出来一个对象。 单例模式实现的要点:单例类只能实例化出来一个单例对象必须能够自行创建实例对象必须能够向整个系统提供这个实力对象单例模式的优点:单例模式只能够创建一个对象,所以在资源方面可以做到节约内存资源单例模式不需要频繁的销毁和创建,所以在效率方面有所提高单例对象在整个系统里面只有一份,可以做到避免共享资源的重复占用...原创 2018-02-21 17:17:01 · 1139 阅读 · 0 评论 -
【Linux】设计模式-----简单工厂模式
概念:简单工厂模式即,只需要输入实例化对象的名称,工厂类就可以实例化出来需要的类。 核心:实现工厂模式的核心就是多个派生类public继承基类,同时根据用户的需求在简单工厂类里面实例化基类的对象,从而根据基类里面的虚函数来实现对派生类的函数调用,同时实现多态。 如图: 利用简单计算器的实例来实现工厂模式:#include<iostream>using namesp...原创 2018-02-25 14:58:30 · 492 阅读 · 0 评论 -
【linux】共享内存!!
在system V IPC里面,共享内存是所有进程间通信速度最快的。因为在消息队列里面,在消息传递的时候需要进行两次拷贝(将数据拷贝到队列节点里面,从队列节点里面拷贝到内存)。 基本原理: 注:进程间通讯的本质就是将不同的进程看到同一块地址空间。但是在页表的映射下,不同的进程所占有的实际地址空间是不同的,所以在不同的进程里面数据是相对独立的。但是要是有一块不同进程都可以访问的空间,那么就可...原创 2018-03-18 22:43:23 · 281 阅读 · 0 评论 -
【linux】管道!!!
进程间通讯的方式有:管道消息队列共享内存信号量在这里面管道是最古老的进程间通讯方式,管道又分为匿名管道和命名管道。 匿名管道 局限性:只能够在具有亲缘关系的进程里面使用管道提供流式服务管道的生命周期随进程内核会对管道操作进行互斥和同步管道数据只能单向传递 在匿名管道里面使用到的函数是int pipo(int fd[2]); fd[0]表示的是读端 fd[1]...原创 2018-03-12 21:42:21 · 321 阅读 · 0 评论 -
【linux】页表的简单理解!!!
在使用的计算机内存(4G)上面用户可以使用的内存只有0~3G,3~4G是系统内核使用的区域。 但是在物理内存上面,任何的区域和位置都是可读可写操作的,假如进程直接访问的是物理内存,那么系统就会存在很大的不安全性。页表 页表的存在很好的协调了物理内存和虚拟内存,从而很好的提高系统的安全性。 在一个进程里面使用的内存可能是很少的一部分,但是存在的实际内存确实很大的,所以在使用页表的时候可...原创 2018-03-12 22:59:10 · 7472 阅读 · 3 评论 -
【linux】信号量!!!
基本概念:临界资源:当一块资源只能够被一个进程访问的时候,这块资源就叫临界资源。 临界区:进程里面访问临界资源的代码叫做临界区。信号量的本质:计数器,计算描述临界资源的多少。信号量集函数:int semget(key_t key,int nsem,int semflg);key:信号量集的名称nsems:信号量集的个数semflg:模式标志若函数调用成功则返回信号集...原创 2018-03-23 22:18:45 · 282 阅读 · 0 评论 -
【linux】信号!!
在linux里面使用kill -l命令可以显示系统的信号列表 这里的1~31是普通信号,34~64是实时信号,这里只研究普通信号内核里面的信号 信号的产生用户在键盘上按下某些键的时候,驱动会发送信号给前台进程。硬件产生信号,当硬件检测到异常的时候会通知内核,内核给进程发送适当的信号。进程使用kill函数向进程发送信号软件条件产生信号处理的方式忽略此信号执行该信号...原创 2018-03-24 15:17:27 · 190 阅读 · 0 评论 -
【网络】CGI入门!!
概念: CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。 组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的Cgi程序。...原创 2018-06-24 15:37:21 · 803 阅读 · 1 评论