- 博客(25)
- 收藏
- 关注
原创 队列
1、对消息队列的操作有下面三种类型:(1) 打开或创建消息队列。消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,只需提供该消息队列的键值即可。注:消息队列描述字是由在系统范围内唯一的键值生成的,而键值可以看作对应系统内的一条路经。(2)读写操作。消息读写操作非常简单,对开发人员来说,每个消息都类似如下数据结构:struct msgbuf{long...
2018-02-26 21:56:41 321
原创 linux进程控制编程
程序是放到磁盘的可执行文件 进程是指程序执行的实例 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关...
2018-02-26 21:12:03 270
原创 栈,队列
1.栈的理解栈(stack)时限定仅在尾表进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom) ,不含任何数据元素的栈称为空栈。栈又称为后进先出(LastIn First Out)的线性表,简称LIFO结构。首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表 2.栈的插入与删
2018-02-06 20:13:03 313
原创 同步IO和异步IO的区别
有两种类型的文件IO同步:同步文件IO和异步文件IO。异步文件IO也就是重叠IO。在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行。而异步文件IO方式中,线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。如果IO请求需要大量时间执行的话,异步文件IO方式可以显著提高效率,因为在线程等待的这段
2018-02-06 17:17:23 502
原创 硬币游戏
连续扔硬币,直到某一人获胜。A获胜条件是先正后反,B获胜是出现连续两次反面,问AB游戏时A获胜概率是()?A、 1/6 B、 1/4 C、1/3 D、1/2 E、2/3 F、3/4**这是一个非常有意思的问题,因为如果是连续仍的,第一次投币出现正面的概率是1/2,当出现正面后如果下一次为反面,则A赢,如果下一次为正,则无人获胜,继续投币,如果再一次为反面的话也是A赢,如
2018-02-06 16:45:47 624
原创 链表
一.线性表的链式存储结构让所有元素不考虑相邻位置,哪有空位就到哪里,只是让每个元素知道它下一个元素的位置在哪。这样,我们可以在第一个元素时,就知道第二个元素的位置(内存地址),而找到它;在第二个元素时,再找到第三个元素的位置(内存地址)。这样所有的元素我们就可以通过遍历而找到。现在链式结构中,除了要存数据元素信息外,还要存储它的后继元素的存储地址。我们把存储数据元素信息的域称为数据域,
2018-02-04 23:20:31 198
原创 堆,栈,队列
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front
2018-02-02 18:42:48 234
原创 在c++程序中调用被c编译器编译后的函数,为什么要加extern“c”
C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个C 函数的声明如下:void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指
2018-02-02 16:48:16 830
原创 什么是预编译,何时需要预编译? 多个文件链接成一个文件
预编译又称为预处理 ,是做些代码文本的替换工作。处理以#开头的指令 , 比如拷贝#include 包含的文件代码,#define宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。 主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中
2018-02-02 16:08:19 883
原创 请说出const与#define相比,有何优点
首先阐述两者区别就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;const定
2018-02-02 15:09:03 1796
原创 关键词const是什么含意,有什么作用
是将一个变量变成常量,添加到符号表中,编译程序时,直接略过,提升代码效率,可通过指针改变const的值(符号表是一个常量,一般不可被修改,指针除外)const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。const关键字的作用主要有以下几点:(1)可以定义const常量,具有不可变性。 例如:const int Max=100; int A
2018-02-02 14:59:43 562
原创 数组与指针的区别
(1)空间分配指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。而数组是静态分配空间,在全局变量区或者栈上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。(2)访问效率指针是通过地址间接访问,而数组是直接访问数值。因此指针的访问效率低,数组的访问效率高。
2018-02-02 14:39:09 9488 1
原创 C语言中分配内存的方式有哪些?C语言中常见的内存错误有哪些?内存管理,内存泄漏,内存空洞?
分配方式有三种: 1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3、从堆上分配,亦称动态内存分配。程序在运行的时候用
2018-01-31 21:21:58 333
原创 Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的
2018-01-31 16:56:41 157
原创 系统调用与库函数的区别和联系(API)
在写程序的过程中,像MFC,VC++这些编程,都会涉及到函数的调用,有库函数也有系统函数,下面看一看它们的区别!!系统调用(system call)和库函数调用(Library function call)的区别?理解库函数的区别和系统调用,首先是kernel mode和user mode这两个模式是这两种函数工作时的空间不同。一、系统调用:系统调用实际上是指底层的一个调用,就是内
2018-01-31 16:52:17 3076
原创 内存管理,预处理,结构体
1.数据段 (.bss .data .rodata)段 .bss段用来存放那些没有初始化和初始化为0的全局变量bss类型的全局变量只占运行时的内存空间,而不占用文件空间现在大多数操作系统,在加载程序时,会把所有的bss全局变量清0.但为保证程序的可以移植性,手工把这些变量初始化为0也是一个好习惯,这样这些变量都有个确定的初始值。当然作为全局变量,在这个程
2018-01-29 21:21:37 142
原创 指针 续
指针是变量的一种,里面是一个地址,通过这个地址找到要寻找的数据int *p = &a // p指向a, p代表a的地址指针无论什么类型都是4个字节,一个字节8位,32位操作系统 段错误的原因:访问了不能访问的内存int *p; //野指针,指向不能访问的地址int *p = NULL; //空指针p = &a; // p是指针,将a的地址赋给p in
2018-01-29 20:12:01 145
原创 函数,数组,
函数for(表达式1, 表达式2, 表达式3)表达式1:初始条件表达式2:结束条件表达式3:执行语句逗号语句(,) 表达式1,表达式2 : 运行先1后2,但是,有1的过程,结果显示是表达式2 的结果break只能出现在循环和switch语句中最长的循环放在最内层
2018-01-28 01:49:33 129
原创 指针
1.指针的类型从语法上来看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型,这是指针本身具有的类型。实例(1)int *ptr; //指针的类型是 int*(2)char *ptr; //指针的类型是 char*(3)int **ptr; //指针的类型是 int** (4)int
2018-01-27 19:33:55 174
原创 函数
1.无参函数的定义形式类型标识和函数名称为函数头。类型标识符指明了本函数的类型,函数的类型实际上是函数返回之类型,该类型标识符与前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。{}中的内容称为函数体。在很多情况下都不要求无参函数有返回值。此时函数类型符可以写void2.有参函数定义的一般形式有参函数比无参函数多了一个内容,即形式
2018-01-25 21:35:26 198
原创 Makefile & GDB & Shell
Makefile(编译工程)target : depengency ( Tab 字符) command 实例第一步.vim Makefile 第二步. hello : hello.o (Tab 键 空4格) gcc hello.o -o hellohello.o : h
2018-01-25 20:16:41 108
原创 C语言基础
一. 数据的表现形式有两种:1.常量 2.变量二.1.常量是一种在程序中保持固定类型和固定值的数据。编译系统从数据形式上可以区分(除枚举类型外)。常量分为:(1)整型常量(2)实型常量(3)字符常量(4)字符串常量(5)枚举常量2.变量是在程序执行过程中可以改变。三.1.整型常量十进制:18、-31long int型常量:123l、123L
2018-01-25 15:03:41 347
原创 Linux小结
file1.作用通过探测文件内容判断文件类型,使用权限是所有客户2.格式file 【options】 文件名3.【options】 主要参数-v : 在标准输出后显示版本信息,并且退出-z : 探测压缩过的文件类型-L : 允许符合连接-f name : 从文件 namefile 中读取要分析的文件名列表4.简单说明使用file 命令可以知
2018-01-23 15:01:31 150
原创 数据类型
提问:1.什么是联合体?2.变量名和变量值区别是什么?3.数据变量有哪些?4.局部变量和全局变量?5.有哪些基本内置类型?6.static是什么?7.extern是什么?8.const是什么?9.typedef是什么?10.枚举与#define的区别?答1.联合体 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏
2018-01-23 14:34:22 144
原创 Linux新手初探
一、Redhat的指令操作界面的打开在Redhat中我们是在 “终端” 中进行指令操作,我们可以在Redhat的左上角 ‘应用程序’—>‘附件’—>‘终端’即可打开,也可以将其拉到桌面上,方便后续打开。打开终端,我们即可进行相应的指令操作二、接下来我们来简单介绍一些常用指令以及他们的使用:
2018-01-23 09:01:54 161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人