- 博客(20)
- 收藏
- 关注
原创 C++四种类型转换操作符
首先回忆一下c语言中的类型转换,在c语言中进行类型转换只需要在变量前加上变量类型,并且转换是双向的。例如,int类型可以转换成double类型,double类型也可子转换成int类型。int i = 0;double d = 1.9;int d2i = (int)d;double i2d = (double)i;c语言中这种简单粗暴的类型转换方式对基本类型还勉强可以,对复杂的自...
2018-04-25 12:53:32
3998
原创 Linux总结——库文件
库文件 (1) 什么是库 在windows平台和linux平台下都存在着大量的库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的本质不同,因此二者库的二进制是不兼容的。 本文仅限于介绍linux下的库。 (2) 库的种类及区别 linux库有分类 静态库和共享库(动态库) 区别: 后缀不同 通常共享库...
2018-03-24 15:34:39
264
原创 Linux总结——gcc、gdb、makefile文件
1、gcc的使用以及编译原理 (1) 编译过程 例如hello.c程序:#include<stdio.h>Int main(void){ printf(“hello world!\n”);return 0;}a. 预处理:编译器将代码中的stdio.h的代码编译进来,用户使用-E选项进行查 看; gcc -E hello.c -o hel...
2018-03-24 15:32:20
719
原创 Linux总结——基础命令部分(二)
4、 文件操作命令(1) 基本操作:ls:显示当前目录下的文件; ls –i:显示文件的inode号码; ls -a:显示所有文件; ls –l:显示目录文件下的文件的详细信息; pwd:显示当前目录的绝对路径(从根目录开始); cd:切换目录; cd .. 退回上一层目录;cd +路径,cd或cd~ 回到家目录;创建文件:touch filename.name(普通文件);mkd
2018-02-26 22:42:32
309
原创 Linux总结——基础命令部分(一)
1、 文件系统:一个可被挂载的数据为一个文件系统。 主要介绍Linux默认的文件系统Ext2。(1) 文件系统特性: a. 磁盘分区需进行格式化,因为每种操作系统所设定的文件属性和权限并不相同, 为了存放这些档案所需的数据,因此需要将分割槽进行格式化,以成为操作系统能够利用的文件系统格式;b. 每种操作系统使用的文件系统并不相同,比如说,
2018-02-26 22:09:04
256
原创 Linux fork源码分析
fork就是复制进程,所以我们要先了解进程的概念。进程是一个正在运行的程序,由程序代码、数据、变量(占用着系统内存)、打开的文件(文件描述符)和环境组成,进程是资源分配的最小单位,由进程控制块管理。每个进程的产生分两步:一、分配PCB;二、准备进程实体,如分配内存空间等。 fork调用一次返回2次,子进程的返回0,父进程返回新子进程的PID。下图是fork调用流程:由下图可知,f...
2018-02-11 22:38:09
813
原创 Linux网络编程基础(二)
前面讲了TCP的编程流程,这里接着来讲UDP的编程流程。讲完UDP的编程流程然后再说两者的区别。UDP的编程流程:同样也要分为服务器端和客户端。 1、服务器端,如下图: 2、客户端,如下图: 现在描述一下UDP编程的接收和发送消息的系统调用函数recv from()和send to():#include<sys/types.h>#include<sys/socket.
2017-11-20 21:18:54
280
原创 Linux网络编程基础(一)
1、怎样完成网络编程 服务器:提供数据的为服务器; 客户端:获取数据的为客户端; 2、协议的选择 TCP:面向连接,可靠的流式服务; UDP:无连接的,不可靠的,数据报服务; 3、TCP的编程流程 sever(服务器端): //3.1 创建socket#include<sys/types.h>#include<sys
2017-11-19 20:55:54
235
原创 线程(二)
线程同步: 1、为什么要同步? 首先我们回忆一下设计线程的初衷:共享资源,提高资源利用率。那么 问题就来了,如果第一个线程在执行一些操作后想要检查当前的错误状态 errno,但在它检查之前,另一个线程却修改了errno,这样是不正确的。 出现上述问题有两个原因: (1) errno是线程之间共享的全局变量;
2017-11-16 13:53:27
180
原创 线程(一)
1、线程的概念: 线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列,即每个进程 至少有一个线程。进程可以通过线程库创建N个线程,这些新创建的线程称之为函数线程,main函数代表的线程为主线程。2、线程与进程的区别: (1) 进程是资源分配的最小单位,线程是CPU 调度的最小单位; (2) 线程是轻量级的进程; (3) 两者的管理方式不同,进程由P
2017-11-12 20:44:21
227
原创 进程间通讯——共享内存
1、概念: 共享内存是两个正在运行的进程之间传递数据的一种有效的方式。 2、机制: 共享内存是由IPC为进程创建的一个特殊的地址范围,它将出现在该进程的地址空 间中,其他正在运行的进程可以将同一段共享内存连接到自己的地址空间中。所 有的进程都可以访问共享内存的地址。如果某个进程向共享内存中写入了数据, 那么写入的数据就可以被访问同一段共享
2017-11-06 22:21:55
267
原创 进程间通讯——消息队列
1、概念: 消息队列与管道有许多相似之处,但少了打开管道和关闭管道的复杂操 作,它提供了一种两个不相关的进程之间传递数据简单且有效的方法。 与命名管道相比,消息队列的优势在于,它独立于发送和接收进程儿存 在,与管道一样的是都有长度限制,这里的长度限制是指消息队列提供向 一个进程向另一个进程发送数据块方法中数据块的最大长度限制。2、消息队列的函数: #include
2017-10-31 23:11:47
197
原创 C与C++的区别
我将会从以下几个方面来简单阐述c与c++的区别:1、函数形参: C++:函数形参可以有默认形参,如果函数形参中有默认形参必须从右往左 给,并且默认值只能给一次; C:无默认形参,形参只能听过实参传值; 2、内联函数(inline) (1) 内联函数与C 中宏的区别: 宏:在预编译阶```
2017-10-31 13:51:49
382
原创 函数调用堆栈
一、栈 1、传统的栈:被定义为一个特殊的容器,用户可以将数据压入栈中,也可以将压入 栈中的数据弹出,但必须遵守一条规则:先进后出。 2、计算机系统中的栈:是一个有以上属性的动态内存区域,压栈操作使得栈增大, 弹出操作使栈减小。栈通常是向下增长的。 3、 最重要的是栈保存了一个函数调用所需的维护信息,这通常被称为堆栈帧。 二、函数调用堆栈过程
2017-10-26 00:26:10
590
原创 进程间通讯——信号量
信号量:通过管理对资源的访问,实现进程间同步控制。在了解信号量的机制之前我们先了解几个与信号量有关的知识点:(1) 临界资源:同一时刻只能呗同一个进程访问的资源;(2) 原子操作:任何情况下都不能被打断的操作 ;(3) 内核对象:用于进程通讯时,多进程能够访问同一资源的记录;1、信号量的定义: 它是一个特殊变量,它只取正整数值,并且程序对信号量的访问都是原子
2017-10-23 18:51:06
257
原创 进程间通讯-——管道
进程间通讯:多个进程间数据变换。通讯方式:信号、管道、信号量、消息队列、共享内存、套接字 这里我要讲的是管道,管道分为半双工通讯、全双工通讯。如果要举例说明的话,半双工通讯就类似自来水管,全双工通讯就类似我们打电话。下面我先用画图解释一下管道的原理:管道不对数据流向做规定,因此为防止进程A读取自己写入的数据(没有意义)采用半双工通讯。管道操作如下:一、有
2017-10-20 10:54:03
303
原创 栈和队列的相互转换
栈的特点 :先进后出;队列的特点:先进先出。所以要实现栈和队列的互换,必须互相模拟彼此的特点。 比如,用两个队列实现栈,一个队列模拟为入栈队列,一个队列模拟为出栈队列,入栈与普通栈相同,而出栈,首先要获得入栈队列的长度,将入栈队列中的元素除去最后一个元素依次出队,并且同时依次入出栈队列,然后将最后一个入栈队列里的元素出队即删除,最后把出栈队列中的元素再依次出队入入栈队列,即
2017-10-08 22:23:33
701
原创 中缀表达式与前缀、后缀表达式的转换
中缀表达式:便于人看;前缀表达式:又称波兰式,运算符在前边,运算数在后边;后缀表达式:又称逆波兰式,运算数在前边,运算符在后边; 一、中缀表达式转换前缀表达式: 1、初始化两个栈,s1(存放数字),s2(存放运算符); 2、表达式右边开始,遍历表达式; 3、遇到数字放入s1中,遇到运算符放入s2中,放入法则如下: (1)如果s2为空,或者“)”,直接放
2017-10-07 14:12:52
767
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅