自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

转载 git 基本用法

git相对于其他的版本控制,优势在于分支管理。几个常见情况及分支使用方法。1  对于自己的代码修改后,却已经不知道服务器上的代码是否已经发生改变。此时想上传自己的代码。1)在master上创建分支mysrc;2)switch到mysrc分支,进行修改代码;3)修改好代码后,进行git commit操作;4)switch到master分支,进行git pull操作,将

2015-04-15 09:23:05 406

转载 cc、gcc、g++、CC的区别概括

gcc是C编译器;g++是C++编译器;linux下cc一般是一个符号连接,指向gcc;gcc和g++都是GUN(组织)的编译器。而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Linux/Unix都是大小写敏感的系统,这点一定要注意。cc是Unix系统的C Compiler,而gcc则是GNU Compiler Collection,GNU编译器套装。gcc原名为Gun

2014-04-03 13:47:11 605

原创 QT基础

一.assistant 帮助文档qtconfig QT配置工具qmake QT的make与项目文件智能工具uic UI界面的设计文件的编译工具moc moc代码创建工具designer ui设计工具二.QT的模块qtcoreqtguiqtnetworkqtsvgqtopengl三.第一个QT程序1.QT编程模型2.QT程序的编译过程3

2014-01-20 22:39:46 704

原创 linux多线程与互斥锁

一.多线程的引入1.了解多线程为了解决决多任务实现。历史unix上服务器不支持多线程,进程之间切换消耗太大,必然要引入多线程。unix/linux上实现多线程有两种方式:内核支持多线程使用的编程技巧封装进程实现多线程:轻量级多线程(基于API实现,非内核级支持)多线程的库:libpthread.so -lpthreadpthread.h2.创建多线程2.1代

2014-01-13 09:02:10 610

原创 TCP编程模型select

一.select的引入多进程的问题:数据共享,进程的上下文环境(context),文件描述符号是整数以及对应的上下文环境。多进程中上下文环境无法共享。二.select tcp服务器编程模式1.select函数 int select(int fds,//建议是监控的文件描述符号的最大值+1.fd_set readfds,//读文件描述符号集合该参数既是输入也是输出 输

2014-01-12 00:27:23 695

原创 linux下socket编程

2014-01-06 23:28:23 713

原创 linux中的IPC

一.IPC背景进程之间需要同步处理,同步需要通信,普通文件就是最基本的通信手段。普通文件IPC有一个进程改变另一个进程无法感知这种改变的问题。解决办法:用特殊的文件:管道文件。二.管道文件1.创建管道文件mkfifo()或使用linux命令mkfifo2.管道文件的特点read管道文件时,没有数据会阻塞,而且read后数据被删除数据有序,先进先出打开的描述符可以

2014-01-05 08:55:51 620

原创 进程的控制

一.进程的基本控制1.进程的常见控制函数(进程同步)1.1为什么需要控制进程控制进程运行顺序等。1.2.pause/sleep/usleep1.3.atexit/on_exit回调函数2.进程与文件锁在多进程下文件读写是共享的文件锁标识一个文件正在被进程读写(建议锁)API:fcnt1(文件锁受内核参数影响)编程技巧:对文件加锁,判定一个文件是否存在锁i

2013-12-31 23:29:52 514

原创 linux目录与进程

一.IO与文件目录管理1.pread=lseek+readpread读取以后不改变读位置2.mmap映射:/proc/${PID}/men 无法映射3.IO的有效用户与实际用户默认情况:实际用户与有效用户是一致的有效用户 effice权限用户实际用户 real执行用户getuid()与geteuid()返回一个整数uid_t4.目录相关函数

2013-12-27 11:04:59 571

原创 IO基础

1.认识内核对象操作系统不允许用户直接访问内核设备和内存但允许通过内核系统函数访问对每个内核对象进行编号ID。如果访问内核对象(内核空间的所有数据的统称),只能通过ID编程模型:申请得到一个ID在内核系统函数中使用ID得到对应内核对象。2.怎么访问文件使用函数,传递一个文件,系统打开文件,加载文件数据返回一个ID。使用函数,传递ID,得到数据。使用函

2013-12-20 09:45:31 597

原创 静态库、动态库

brk/sbrk维护一个位置,brk/sbrk改变这个位置brk改变绝对位置sbrk改变相对位置一,映射虚拟内存没有任何额外维护数据的内存分配mmap分配 unmap 释放1.函数说明void * mmap(void *start,//指定映射的虚拟地址 0 由系统指定开始位置size_t length,//映射空间大小int prot,// 映射权

2013-12-13 09:27:22 637

原创 C与虚拟内存

#includeint add(int a,int b){return a+b;}main(){int (*fun)(int )=(int (* )(int )) add;fun f=f(20);printf("%d\n",r);}函数执行的时候有自己的临时栈函数的参数就在临时栈中,如果函数传递实参,则用来初始化临时的参数变量  传递三个参数不会报错

2013-12-07 22:28:53 1499

原创 内存结构、堆结构及内存分配函数

Linux对内存结构的描述1、在linux中,目录/proc/${pid}/下存放着相应进程运行时的所有信号,其它maps中包含对该进程的内存分配信信息,在命令行下执行maps即可查看(必须是当前执行中的进程,进程结束时,对应目录自动销毁)可以以如下程序做实验:#include#includemain(){print("%d\n",getpid());while()

2013-12-01 17:49:45 957

转载 static在C和C++中的区别与总结

static主要作用下三个环境下,局部静态变量、外部静态变量与函数、静态数据成员与函数。一、局部静态变量1. 存储空间分配和生存周期不同auto类型局部变量就是普通的局部变量(不加修饰的局部变量默认为该类型)。该类型局部变量存储在栈上,在动态存储区,生命周期仅限于定义它的函数,函数结束,它就自动释放。static类型局部变量存储在静态存储区,在程序整个运行期间都不释放。两者之间的作用域

2013-12-01 09:46:23 551

转载 select、poll、epoll的比较(转自阿笨猫的窝)

linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);int poll(struct po

2013-11-23 10:48:36 639

转载 STL源码剖析的一个错误,转自豆瓣

关于 std::copy 函数的,当 copy 最终调用到 memmove 时,侯捷对 memmove 的说明是错误的。   特此说明一下:   1. memmove 并不是先申请一块 temp 内存,把 src 拷贝到 temp,再从 temp 拷贝到 dest!   2. memmove 不会释放,或者清零 src   3. memmove 真正做的,是根据 src 和 des

2013-11-19 20:29:44 806

原创 图的遍历

图的遍历可分为深度优先搜索和广度优先搜索。深度优先遍历(Depth First Search)类似于树的先根遍历,是树的先根遍历的推广。核心思想是,先假设初始状态是图中所有顶点未曾被访问,则深度优先搜索图中的某个顶点V出发,然后依次从V的未被访问的邻接点出发深度优先遍历图,直到图中所有和V有路径相通的节点都被访问到,若此时力中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过

2013-11-17 15:50:53 638

转载 转自陈皓-coolshell-程序员技术练级攻略

前言你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)建议:不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。一

2013-11-13 20:53:41 1094

原创 对KMP算法理解

KMP算法是一种在一个字符串中匹配另一个字符串的高效算法。简单字符的匹配算法时间复杂度为O(m*n);kmp算法的时间复杂度为O(m+n)。下面是我在VS上的求next值验证算法。#include "abc.h"#include using namespace std;int main(){char p[]="abaabcdc";int i=0,k=0;

2013-11-12 21:45:27 498

转载 带括号的表达式求值问题

1.编写代码对算术表达式求值的经典方法由 Donald Knuth 描述于 1962 年。Knuth 将此概括为三个步骤:对中缀表达式进行语法分析中缀表达式到后缀表达式的转换对后缀表达式求值注意到我们谈到的这个经典算法有些简化:算术表达式只包含操作数、二元操作符和一种括号。此外,对于每个操作数和操作符,只用单个字符表示,使语法分析直观。算术表达式中最常见的表示法

2013-10-29 21:52:37 1990

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除