linux下git的基本操作 1、git的基本内容本地目录:本地的git文件夹;暂存区:每一次进行git add之后,系统会将这些版本放入暂存区里,可以进行撤销和发到仓库中;本地仓库:每次进行git commit之后进行的操作,等待上传到远程仓库中;远程仓库:push之后,将数据存储到服务器中;2、git与github进行连接1)在家目录中,进入到.ssh文件夹中;2)需要注册一个GitH...
进程间通信——共享内存 1、共享内存:两个进程在内存的同一块区域具备管理的权限,同时可以对内存进行读写操作,但是由于这样很难做到同步,所以要配合一些其他控制进程的,例如信号量2、共享内存的函数:int shmget(key_t key, size_t size, int shmflg); 创建共享内存void *shmat(int shmid, const void *...
进程间通信——信号量 1、信号量:特殊的变量,用来同步进程。内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行。然而,当内核控制路径试图获取内核信号量锁保护的忙资源时,相应的进程就被挂起。只有在资源被释放时,进程才再次变为可运行。只有可以睡眠的函数才能获取内核信号量;中断处理程序和可延迟函数都不能使用内核信号量。原子减一(p操作,代表获取资源)原子加一(v操作,代表释放资源)想...
进程间通信——管道 1、管道是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的特点,所以这个作为传递消息的共享文件就叫做“管道”。2、管道的分类:有名管道 无名管道 mkfifo/mkfifo() pipe() 半双工 半双工 数据在...
进程中的fork与exec 一、fork()函数(父进程创建子进程)一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与...
进程与信号 1、进程是什么?进程简单点来说就是一个正在运行的程序。2、进程的一些属性1)Pid:唯一标识一个进程1)pcb:进程控制块,描述一个进程的属性信息的结构体3、进程的状态:1)运行状态:该进程正在时间片中执行。2)就绪状态:进程已经做好了准备,只要有时间片空闲就开始执行。3)阻塞状态:进程在某些事情发生前不能执行,等待阻塞进程的事件完成。4、信号 ...
链接库(静态库 共享库) 一 、库的概念库:库是预先编译好的方法的集合。库文件常存放的地点为/lib 或者 /usr/lib,库对应的头文件一般放在/usr/include 中.在linux 中库的命名一般为:libxxx.a(静态库) ibxxx.so(共享库)二、静态库的生成有两个方法 int add(int...
程序的编译与执行(gcc,g++) 一、gcc与g++编译 *.c文件与*.cpp文件的方法gcc: *.c:按c语法 *.cpp: 按c++语法,但是不链接c++标准库 需要手动指定 –lstdc++g++:*.c: 按c++语法 *.cpp: 按c++语法二、编译与执行的流程(1) 预编译 :c:gcc -E main.c -o main.i (2) 编译:...
linux 基本操作 1、目录结构/文件系统/bin 命令 可执行程序 /home 普通用户的家目录 /lib 库文件 /mnt 临时挂载点 /etc 系统的配置文件 /proc 系统进程信息 /boot 设备文件 /usr 运行过程中不常改变 /dev 设备文件 /var 运行过程中常改变的 ...
函数调用堆栈的过程 函数在进行调用时会产生开栈和清栈的操作,那么就来介绍一下函数调用堆栈的过程吧首先,利用一个小例子来研究这个过程:#include<iostream>int Fun(int a,int b){ int tmp = 0; tmp = a + b; return tmp;}int main(){ int a = 10; int b = 20; int ...
编译链接过程 在谈编译链接过程之前我们需要了解一下虚拟地址空间以及程序在编译链接过程时经过了什么步骤。虚拟地址空间之前在进程空间的博客中详细介绍过了,详见:https://blog.csdn.net/wry_sunny_/article/details/86651871一、虚拟地址空间上图就是32位系统中4G虚拟地址空间的分布情况.text 段:指令段,存放的是指令代码,在程序中,我们把局部变量...
两个栈实现一个队列,两个队列 实现一个栈 之前我们对栈和队列的存储结构进行了一些了解,并且实现了栈和队列的一些操作,例如入栈(入队列),出栈(出队列)等。但是我们今天要讨论的是一个经典的面试题,那就是利用两个栈实现一个队列,两个队列实现一个栈。要想实现这个结构,我们必须先得了解栈和队列的存储结构,以及他们各自的特性,这样我们才能解决问题。之前栈和队列的实现我已经写过了,今天就直接利用STL库中的stack和queue。一、两个...
数据结构——队列(queue) 一、顺序队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又...
数据结构——栈(stack) 一、顺序栈栈(stack)是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它...
数据结构——双向循环链表 双向循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。双向循环链表的操作和双向链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同。双向循环链表的头结点的前驱指向最后一个结点,尾结点的后继指向头结点。注意:双向循环链表中无其他结点,只有头结点时 ,头结点的前驱和后继度指向自身。1、双向循环链表的存储结构t...
数据结构——双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针域,prev域和next域,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。1、双向链表的存储结构双向链表和单链表的区别在于双向链表除了与单链表具有相同的数据域和next域之外,有一个指向前驱的prev域。typedef int ElemType;type...
数据结构——循环单链表 循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。循环单链表只是将单链表的尾结点的指针指向头结点,就直接书写代码,有一点需要主要的是在循环单链表中只有头结点时,将头结点的指针域不指向空,而是执行自己。...
数据结构——单链表 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。1、单链表的存储结构单链表的存储结构分为两种,带头结点的单链表和不带头结点的单链表,今天我写的是带头结点的单链表,不带头结点与之一样,只是将头变为了...
数据结构———顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。typedef s...
进程地址空间 一、实地址模式cpu复位或者加电网的时候是以是实模式启动的,在实模式下,内存寻址方式和8086相同,由16位段寄存器的内容乘以16(10H)当做段基地址,加上16位偏移地址形成20位的物理地址,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86 CPU用做高速的8086。在实模式下,所有的段都是可以读、写和可执行的。物理地址 = 基地址<<4 + 段内偏移...