- 博客(27)
- 收藏
- 关注
转载 Linux - 进程间通信 - 信号量
一、概念 简单来讲,信号量是一个用来描述临界资源的资源个数的计数器。 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件、外部设备等)来实现进程间通信,他本身更只是一种外部资源的标识。信号量在此过程中负责数据操作的同步、互斥等功能。 当请求 一个使用信号量来表示 的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求;...
2016-09-10 18:33:00
180
转载 Linux - 进程间通信 - 命名管道
1、命名管道的特点:(1)是管道,可用于非血缘关系的进程间的通信(2)使用命名管道时,梁金成需要用路径表示通道。(3)命名管道以FIFO的文件形式存储于文件系统中。(FIFO:总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出。)(4)命名管道是一个设备文件。(因此进程与创建FIFO的进程没有血缘关系,也可以通过访问路径进行通信。)2、命名管道的创建:(...
2016-09-03 16:51:00
145
转载 Linux - 进程间通信 - 匿名管道
一、概念:进程间通信( IPC,InterProcess Communication) 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进城之间要交换数据必须通过内核,在内核中 开辟一块缓冲区进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内接提供的这种机制成为进程间通信(IPC,InterProcess Commu...
2016-09-03 16:35:00
141
转载 Linux--shell脚本之文本处理工具
文本处理工具--grep、sed、awk Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配。而grep又有助于理解sed和awk。1、grepLinux系统中grep命令是一种强大的文本搜索、查找过滤工具,,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Glob...
2016-08-11 13:49:00
139
转载 Linux--shell脚本之正则表达式
一、正则表达式的概念及特点: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。给定一个正则表达式和另一个字...
2016-08-11 01:59:00
324
转载 Linux - IP数据报报头及个字段的意义
IP数据报的格式: IP 数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。 对于IPv4 ,4位版本字段是4。 (1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本 号为4(即IPv4)。关于IPv6,目前还处于草案阶段。 (2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这...
2016-08-04 01:31:00
673
转载 Linux - 死锁现象
一、死锁的概念: 1、死锁的现象描述: 在很多应用中,需要一个进程排他性的访问若干种资源而不是一种。例如,两个进程准备分别将扫描的文档记录到CD上。进程A请求使用扫描仪,并被授权使用。但进程B首先请求CD刻录机,也被授权使用。这时,A请求使用CD刻录机,但这个请求在B释放CD刻录机前会被拒绝。但是,进程B非但不会释放CD刻录机,还去请求扫描仪。这时,两个进程僵持不...
2016-08-04 00:51:00
333
转载 Linux--线程安全与可重入函数的异同
线程安全 比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成: 1. 在 Items[Size] 的位置存放此元素; 2. 增大 Size 的值。 在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;而如果是在多线程情况下,比如有两个线程,线程 A 先将元素1存放在位...
2016-07-19 01:00:00
107
转载 Linux--管道pipe
管道是一种最基本的IPC机制,由pipe函数创建:#include <unistd.h> int pipe(int filedes[2]);调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端(很好记,...
2016-07-19 00:32:00
104
转载 Linux--struct file结构体
struct file(file结构体): struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct fi...
2016-07-17 01:21:00
510
转载 Linux--谈父子进程执行过程
fork函数用于从已存在进程中创建一个新进程,新进程成为子进程,原进程成为父进程。这两个进程分别返回他们各自的返回值,其中父进程的返回值是子进程的进程号,子进程则返回0,因此返回值大于0标识父进程,等于0标识子进程。所以我们可以通过返回值来判定该进程是父进程还是子进程。fork函数创建新进程后的父子进程模型如下:下面用一个简单程序来观察父子进程之间的运行过程:...
2016-07-16 17:18:00
448
转载 Linux - 函数的栈帧
栈帧(stack frame),机器用栈来传递过程参数,存储返回信息,保存寄存器用于以后恢复,以及本地存储。为单个过程(函数调用)分配的那部分栈称为栈帧。栈帧其实是两个指针寄存器,寄存器%ebp为帧指针,而寄存器%esp为栈指针,当程序运行时,栈指针可以移动(大多数的信息的访问都是通过帧指针的)。总之简单一句话,栈帧的主要作用是用来控制和保存一个过程的所有信息的。栈帧结构如下...
2016-06-28 03:16:00
137
转载 Linux-粘滞位的使用
粘滞位(Stickybit),又称粘着位,是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位,也只能针对⽬录设置,对于⽂件⽆效。则设置了粘滞位后,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户...
2016-06-28 01:10:00
130
转载 Linux - atexit()(注册终止)函数
进程终⽌的⽅式有8种,前5种为正常终⽌,后三种为异常终⽌:1、 从main函数返回;2 、调⽤exit函数;3 、调⽤_exit或_Exit;4 、最后⼀个线程从启动例程返回;5 、最后⼀个线程调⽤pthread_exit;6 、调⽤abort函数;7 、接到⼀个信号并终⽌;8 、最后⼀个线程对取消请求做出响应。atexit() 函数:注册终止函数 即main执行结束后调用的...
2016-06-26 23:29:00
273
转载 Linux - 进程调度算法
进程调度: 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。一、进程的基本状态及状态间的转换: 1.等待态:等待某个事件的完成; 2.就绪态:等待系统分配处理器以便运行; 3.运行态:...
2016-06-11 23:54:00
222
转载 memory库函数的实现
下面主要对常用的几个memory库函数的实现(memcpy、memmove、memset、memcmp):memcpy函数与memmove函数:相同点: 两者实现的功能均为从src拷贝count个字符到dest。不同点: 1、memcpy函数不考虑内存是否有覆盖的问题,也就是说他只负责完成拷贝工作,至于拷贝后的值正确与否,它是不理会的。 2、memmove函数考...
2016-06-03 17:08:00
549
转载 剑指Offer面试题1
面试题1:题目描述: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。 class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); pr...
2016-06-02 13:08:00
86
转载 Linux - PCB之task_struct结构体
task_struct结构描述1.进程状态(State)进程执行时,它会根据具体情况改变状态 。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。内核表示含义TASK_RUNNING可运行TASK_INTERRUPTIBLE可中断的等待状态...
2016-06-01 12:35:00
108
转载 Linux-配置vim开发环境
vim是一个类似于vi的著名的功能强大、高度可定制的文本编辑器,在vi的基础上改进和增加了很多特性。vim是纯粹的自由软件。为了满足使用者的要求,将vim界面配置为自己想要的界面类型也变得流行起来。下面,简单介绍一下vim的配置过程: 1、首先,为了确保易操作性(直接将Windows下的文件拖拽至虚拟机环境下),在配置vim前检查一下Linux环境下的文件共享功能是否开启:...
2016-05-28 23:53:00
137
转载 Linux-Find命令
在Linux中,我们经常要查找某个文件,但不知道放在哪里了,针对这种情况,我们可以使用以下这些命令来进行文件的搜索:Which: 查看可执行文件的位置。whereis: 查看文件的位置。locate: 配合数据库查看文件位置。Find: 实际搜寻硬盘查询文件名称。在这里,我们重点介绍Find命令:Find指令:1.命令功能:Find指令主要用来查找文件,在文件树(目录结构)中...
2016-05-23 10:48:00
237
转载 Linux -atime、mtime、ctime
Linux中,文件都有其自身的atime、mtime、ctime,在不同的命令下,各时间发生相应的改变。下面,我们来简单的介绍一下:atime (access time):表示最后一次访问文件或目录的时间。mtime (medify time):表示文件内容或目录最后被修改的时间。ctime (change time):表示文件所有者、权限或文件内容或目录...
2016-05-23 09:26:00
182
转载 自己实现的string的库函数
为了更好地理解string的各个库函数,现将几个常用的库函数用自己的方式实现如下:#include<iostream>using namespace std;#include<cassert>//求字符串的长度 (注:'\0'的长度不计算在内)int my_strlen(char* str){ if (str == NUL...
2016-05-18 17:50:00
114
转载 单链表的面试题
//常见面试题//1、逆序打印(从尾到头打印)单链表---------递归思想void PrintTailToHead(ListNode* pHead){ if (pHead != NULL) { PrintTailToHead(pHead->_next); printf("%d->", pHead->_data); }}void MeetingTest...
2016-04-21 16:54:00
141
转载 顺序表的实现
1 #include<iostream> 2 using namespace std; 3 #include<cassert> 4 typedef int DataType; 5 6 class SeqList 7 { 8 public: 9 SeqList() 10 ...
2016-04-17 17:15:00
98
转载 指针数组与数组指针
一、指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。二、数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。eg:下面哪个是数组指针,哪个是指针数组:A), int *p1[10];-->指针数组B),...
2016-04-14 11:18:00
93
转载 指针与数组
一、指针 1、 指针==地址;指针有两个值:自身值 与 指向的值 2、指针的四个方面: 1) 指针的类型 2) 指针指向的类型 3) 指针的值或指针所指向的内存区 ...
2016-04-13 16:41:00
113
转载 sizeof 与 strlen
一、sizeof sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系...
2016-04-10 17:10:00
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人