自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 解决vim的backspace不能正常使用

先把Cygwin下载下来,想在linux下编程的话一定要安装vim,gcc和gdb,现在主要是解决vim中backspace不能正常使用的问题。Cygwin安装之后打开显示的应该是这样的格式 USERNAME@COMPUTERNAME ~现在是在/home/username路径下,比如说我的用户名字是grass,计算机名字是WJK,现进行如下操作:GRASS@WJK $ cd

2015-05-10 10:56:29 1116

转载 C++ 内存分配(new,operator new)详解

本文主要讲述C++ new运算符和operator new, placement new之间的种种关联,new的底层实现,以及operator new的重载和一些在内存池,STL中的应用。一 new运算符和operator new():     new:指我们在C++里通常用到的运算符,比如A* a = new A;  对于new来说,有new和::new之分,前者位于std     

2015-04-13 11:42:31 1316

转载 C语言变量声明加冒号的用法

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域

2015-01-05 22:32:31 1066

原创 vim Tlist命令

三、TagList插件简述及使用TagList插件,是一款基于ctags,在vim代码窗口旁以分割窗口形式(如上图所示)显示当前的代码结构概览,增加代码浏览的便利程度的vim插件.在Vim中加载代码文件后,可以使用以下命令控制taglist:TlistOpen(直接Tlist也可)打开并将输入焦点至于标签列表窗口,效果如上图所示TlistClose关闭标签列表窗口T

2014-12-31 09:25:58 2264

转载 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符

我们经常会碰到需要fork子进程的情况,而且子进程很可能会继续exec新的程序。这就不得不提到子进程中无用文件描述符的问题!fork函数的使用本不是这里讨论的话题,但必须提一下的是:子进程以写时复制(COW,Copy-On-Write)方式获得父进程的数据空间、堆和栈副本,这其中也包括文件描述符。刚刚fork成功时,父子进程中相同的文件描述符指向系统文件表中的同一项(这也意味着

2014-12-21 21:41:14 1058

转载 输出二叉树中所有从根结点到叶子结点的路径

// 输出二叉树中所有从根结点到叶子结点的路径.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include #include using namespace std;struct BTNode{ char m_value; BTNode *m_left; BTNode *m_right;};//先序创建二叉树void CreatBTr

2014-11-16 11:55:44 1570

转载 最长公共子序列和最长公共子串

问题定义:最长公共子序列,序列的意思是顺序对就可以,并不需要是连续的。例如:ABCDEOALBLCLDLE其中ABCDE就是这两个字符串的最长公共子序列。容易知道一个长度为n的字符串的子序列有2n个,假设两个字符串的长度都为n,直接去求解两个字符串的最长公共子序列需要用这2n个序列串去匹配另外一个字符串,匹配一次的时间复杂度为O(n),则总的时间复杂度为O(n⋅2n

2014-11-16 11:53:42 741

原创 成员函数内定义static变量

在成员函数内定义static变量

2014-11-11 15:21:15 9838 1

转载 C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容

一、本文目的与说明    1. 本文目的:理清在各种继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容。    2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的特殊性,所以在总结它的性质时将它单独列出来了。    3. 单继承、多继承、虚继承,既然都属于继承,那么虽然有一定的区别,但还是相同点比较多。如果放在一块讲,但为了

2014-11-11 09:51:18 578

转载 返回指向局部变量的指针或引用

返回局部变量没问题 如果返回局部变量有问题,函数的意义还有吗? 全局变量还用返回吗? 返回指向局部变量的指针才有问题, 函数退栈之后,局部变量消失, 指针将指向未知区域,所以出现问题。返回局部变量的引用也是绝对不可以的。 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义。 还有,如果是堆空间,可以返回,即在函数中用new申请的空间,是可以返

2014-11-04 08:57:03 3499

原创 GNOME终端(terminal)字体配置

使用yum update之后,终端字体变得buz

2014-10-31 16:19:45 7151

转载 Linux下C程序的存储空间布局

下面是对可执行文件aa运行size命令后得到的结果。     [root@xxx1 algriom]# size aa    text      data    bss    dec    hex   filename    1257    500     16   1773    6ed  aa    其中:    text:表示正文段大小,这是CPU执行的机器指令部分,通常

2014-09-25 11:02:21 637

转载 Linux虚拟地址空间布局

在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内核使用那么多物理内存,仅表

2014-09-25 11:00:14 720

原创 linux可重入、异步信号安全和线程安全

一 可重入函数

2014-09-25 10:41:45 3189

转载 Linux动态链接库.so文件的创建与使用

1. 介绍        使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。  程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared li

2014-09-24 23:07:00 1087

原创 getopt函数用法

描述:getopt函数是用来解析命令行参数的, 以‘-’或‘--’开头的参数为选项元素,除去‘-’或‘--’的选项元素为选项字符。如果getopt函数被重复调用,则它将会依次返回每个选项元素中的选项字符。使用getopt函数需要包含以下头文件:#include #include 有几个全局变量与getopt函数解析参数有关:opt

2014-09-24 16:10:09 1043

原创 终端

一、终端要理解伪终端(Pseudo Terminal),先来看看什么是“终端”(Terminal)。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。1、串行端口终端(/dev/ttySx)串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。这些串行端口所对应的设

2014-09-23 22:04:05 685

转载 Linux内核的示意图 [摘抄]

Contents [hide]1 Linux内核的简化矩阵图2 数据穿过Linux内核的路径完整的路径3 Linux内存管理4 Linux IO协议栈框图Linux内核的简化矩阵图数据穿过Linux内核的路径完整的路径Linux内存管理Linux IO协议栈框图Relat

2014-09-22 23:10:25 768

原创 sysconf()、pathconf()和fpathconf()函数

对于运行时的限制值和选项,我们已经知道可以用sysconf()、pathconf()和fpathconf()三个函数之一来确定它们的值。具体地,sysconf()用于获得与文件或目录无关的限制值,以及系统特征选项;pathconf()和fpathconf()用于获得与文件或目录有关的限制值。这三个函数的原型为:#include long int sysconf(int parameter)

2014-09-22 15:21:23 4390 1

原创 值-结果参数(socket编程中的函数举例)

我们已经知道,当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递方式取决于结构的传递方向:从进程到内核,还是从内核到进程。1、从进程到内核传递套接口地址结构有3个函数:bind、connect和sendto,这3个函数的一个参数是指向套接口地址结构的指针,另一个是结构的整数大小,例如:struct socka

2014-09-22 08:49:38 1328 1

转载 setsockopt()函数用法

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历

2014-09-21 19:45:49 570

原创 I/O复用——poll(二)

poll函数[cpp] view plaincopy#include   int poll(struct pollfd *fdarray,unsigned long nfds,int timeout);  /***** 返回,准备好描述字的个数,0---超时,-1---出错******/  第一个参数是指向一个结构数组第一个元素的指针

2014-09-20 12:34:38 430

原创 I/O复用——select(二)

select函数该函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或是多个事件发生或经历一段指定的时间后才唤醒它。我们调用select告知内核对哪些描述字(就读、写或异常条件)感兴趣以及等待多长时间。我们感兴趣的描述字不局限于套接口,任何描述字都可以使用select来测试。select函数原型:#includeselect.h>#includeint sele

2014-09-20 12:30:09 454

原创 I/O复用:select和poll函数(一)

一、概述         我们看到上面的TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题就是在客户阻塞于(标准输入上的)fgets调用期间,服务器进程会被杀死。服务器TCP虽然正确地给客户TCP发送一个FIN,但是既然客户进程阻塞于从标准输入读入的过程,它将看不到这个ROF,知道从套接字读时为止(可能已经过了很长时间)。这样的进程需要一种预先告知内核的能力,使得内核一

2014-09-20 12:22:23 566

转载 getaddrinfo函数详解

函数原型: int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); void freeaddrinfo(struct addrinfo *res); struct addrinfo 

2014-09-20 10:35:11 1751

原创 网络字节序与主机字节序的转换

在对IP地址结构体SOCKADDR_IN赋值的时候,经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?下面我写出他们之间的转换:用IP地址127.0.0.1为例: 第一步   127

2014-09-20 08:50:03 3481 1

转载 标准I/O-1-getchar,scanf,gets,fgets,puts,fputs,格式控制

重点:scanf(),getchar(),gets(),fgets()getchar()原型:int getchar(void);作用:从stdin中获取一个字符返回值:returns it as an unsigned char cast to an int, or EOF on end of file or error.注意:①可以获取非输出字符(如' ',

2014-09-19 10:26:54 752

转载 自己实现popen函数

闲来无事,自己实现了popen函数mypopen,后来查看了popen函数的源码发现自己实现的与其相差无几,本函数与linux中的实现最大的不同是不需要用专门的pclose()函数来关闭文件指针,用普通的fclose()即可,linux实现的代码也会给出在下文,可以对比一下其中差异。    主要通过pipe管道实现,具体思路如下:        1、使用pipe()建立管道

2014-09-19 08:56:57 1267

原创 popen和pclose函数

标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行。这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。popen函数还创建一个管道用于父子进程间通信。父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。下在给出popen、pclose的定义:

2014-09-18 22:58:10 17192 1

转载 [Debian/linux小技巧]如何查看某个命令的源代码

来自:http://www.unixresources.net/linux/clf/debian/archive/00/00/58/31/583104.html       我们在学习Linux的过程中,对平时使用的命令的功用惊叹的同时,可能也会想要查看一下它们的源代码。可以使用下面的方法:比如,我们想要查看more的源代码:#which more   /bin/more#

2014-09-18 21:36:15 1329

转载 IO模式设置,阻塞与非阻塞的比较

非阻塞IO 和阻塞IO:       在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:       基本概念:              阻塞IO::                     socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会                    

2014-09-18 16:10:45 921

原创 阻塞和非阻塞read/write

read函数调用read函数从大

2014-09-17 16:13:26 29203 3

转载 Linux 守护进程daemon

Daemon程序简介        Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程。      比如,我们的网络服务程序,可以在完成创建套接口,绑定套接口,设置套接口为监听模式后

2014-09-17 14:25:29 1833

原创 linux启动程序

启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。启动第二步--读取MBR众所周知,硬盘上第0磁道第一个扇区被称为MBR,也

2014-09-17 09:55:22 523

转载 Linux 的启动流程

辅助环境:rh9,fc7另:本文如无特殊解释,init.d指的就是/etc/rc.d/init.d目录。本文包括3部分内容1、        Linux的引导过程2、        运行级别3、        /etc/rc.d/ 与/etc/rc.d/init.d的关系都仅限于自身的理解,如有差错和不足的地方请指正和补充!一起学习,一起进步。        “

2014-09-17 09:29:06 393

转载 Linux中的文件描述符与打开文件之间的关系

1. 概述    在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件

2014-09-16 22:12:24 668

原创 dup和dup2

3.2. dup和dup2函数dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Stat

2014-09-16 21:55:49 852

原创 sigwait()函数

线程可以通过

2014-09-16 17:10:42 3030

转载 进程和线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)线程是处理器调度的基本单位,但进程不是. (4)二者均可并发执行. 线程、进程和程序的简单比较 

2014-09-16 08:46:14 557

转载 线程同步:条件变量的使用细节分析

如同互斥量和读写锁一样,条件变量也需要初始化和回收#includeint pthread_cond_init(pthread_cond_t *restrict cond,pthread_condattr_t *restrict attr);int pthread_cond_destroy(pthread_cond_t *cond);互斥量和读写锁解决了多线程访问共享变量

2014-09-15 22:12:26 413

空空如也

空空如也

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

TA关注的人

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