基础
secret丶
这个作者很懒,什么都没留下…
展开
-
适合新手的网络编程,用socket传文件(本例传的是jpg图片) 用到sendfile函数
服务器端代码:用来接受客户端发来的文件#include#include#include#include#include#include#include#includeint main(int argc,char* argv[]){assert(argc>2);FILE *filefd=fopen("a.jpg","ab");struct sock原创 2015-09-09 09:34:46 · 1112 阅读 · 2 评论 -
大端小端,,,A和a的ascii码
我们的平台通常都是小端:低位放在低地址!!!0: 0x30 48A:0x41 65a:0x61 97原创 2015-11-05 18:31:22 · 1046 阅读 · 0 评论 -
do{}while(0)
在一些Linux内核和其它的开源代码中,我们经常看到像下面这样的代码:123do{ ... }while(0)该代码片段并非循环,这样想想似乎使用do…while没有任何意义,那么为什么还要使用它呢?实际上,do{...}while(0)的用途并不仅仅是优转载 2015-10-08 09:25:53 · 482 阅读 · 0 评论 -
memmove与memcpy区别
Memcopy和memmove函数在linux下看了一下两个函数的源码。两个函数都在头文件string.h中定义,函数原型为:void * __cdecl memcpy ( void * dst,const void * src,size_t count);void * __cdecl memmove ( void * dst,const void * src,size_t原创 2015-10-23 11:00:04 · 548 阅读 · 0 评论 -
c++中的异常安全性
一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源;2.不允许破坏数据。 我们先通过两个反面的例子开始。 第一个是造成资源泄漏的例子。一个类Type,内含一个互斥锁成员 Mutex mutex,以及一个成员函数void Func()。假设Func函数的实现如下所示:[cpp] view plaincopy转载 2015-10-28 10:04:34 · 357 阅读 · 0 评论 -
采用dlopen、dlsym、dlclose加载动态链接库
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一转载 2015-11-19 16:11:36 · 439 阅读 · 0 评论 -
程序的内存布局
程序的内存布局 现代的应用程序都运行在一个虚拟内存空间里,在32位的系统里,这个内存空间拥有4GB的寻址能力。现代的应用程序可以直接使用32位的地址进行寻址,整个内存是一个统一的地址空间,用户可以使用一个32位的指针访问任意内存位置。在进程的不同地址区间上有着不同的地位,Windows在默认情况下会将高地址的2GB空间分配给内核,而Linux默认将高地址的1GB空间分配给内转载 2015-11-19 16:07:56 · 480 阅读 · 0 评论 -
c调用c++函数(包括类成员函数)的方法
声明:引用两处博客http://blog.csdn.net/lg1259156776/http://blog.csdn.net/caspiansea/article/details/9676153精要一揽C调用C++,使用extern “C”则是告诉编译器依照C的方式来编译封装接口,当然接口函数里面的C++语法还是按C++方式编译。使用extern转载 2016-03-01 17:24:07 · 26042 阅读 · 1 评论 -
Python正则表达式
1. Python正则式的基本用法1.1基本规则1.2重复1.2.1最小匹配与精确匹配1.3前向界定与后向界定1.4组的基本知识2. re模块的基本函数2.1使用compile加速2.2 match和search2.3 finditer2.4 字符串的修改与替换3. 更深入的了解re的组与对象3.1编译后的Pattern对象3.2 组与Ma转载 2016-03-01 19:08:10 · 489 阅读 · 0 评论 -
静态库&&动态库
编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们转载 2016-03-07 11:40:48 · 242 阅读 · 0 评论 -
java关键字native、static、final详解
native:native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Jav原创 2016-03-21 10:54:50 · 19943 阅读 · 0 评论 -
java4种内部类
一般来说,有4中内部类:常规内部类、静态内部类、局部内部类、匿名内部类。 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中。 1.常规内部类中的方法可以直接使用外部类的实例变量和实例方法。 2.在常规内部类中可以直接用内部类创建对象 3.代码如下: public class MyOuter { private int x = 100;转载 2016-03-21 11:08:51 · 361 阅读 · 0 评论 -
Git SSH Key 生成步骤
Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。github的SSH配置如下:一 、设置Git的user name和email:$ git config --global user.name "xuhaiyan"$ git config --global user.email "haiyan.xu.vip@gmail转载 2016-05-18 20:00:43 · 331 阅读 · 0 评论 -
sizeof相关的笔试题
1.常规char str1[] = “Hello” ;char str2[5] = {'H','e','l','l','o'};char str3[6] = {'H','e','l','l','o','/0'};char *p1 = "Hello";char *p2[]={"hello","world"}; int n = 10;int *q = &n转载 2015-11-05 18:17:16 · 412 阅读 · 0 评论 -
c++类静态成员详解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静转载 2015-10-20 16:56:26 · 272 阅读 · 0 评论 -
http解析中的一些东西,strpbrk,strcasecmp,strncasecmp,strspn,strcspn
http解析中的一些东西:1:/t:空格/r:回车/r/n:一行结束的标志2:strpbrk():函数原型:extern char *strpbrk(char *str1, char *str2)参数说明:str1待比较的字符串,str2为指定被搜索的字符串。 所在库名:#include 函数功能:比较字符串str1和str2中是否原创 2015-09-11 09:40:59 · 551 阅读 · 0 评论 -
struct字节对齐的问题,找工作笔试面试很喜欢考!!!!!
什么是字节对齐,为什么要对齐?TragicJun 发表于 2006-9-18 9:41:00 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用转载 2015-09-07 14:55:18 · 416 阅读 · 0 评论 -
用指针修改const变量问题
const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改。以下是VC6下才测试。1 不能修改的情况#include int const a = 10;void main(void){ int *p = (int*)&a; *p = 20; printf("%d\n", *p);}程序编译通过,但运行时错误:转载 2015-09-07 11:06:53 · 603 阅读 · 0 评论 -
typedef和define的详细区别
typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。 #define是预处理指令。下面让我们一起来看。typedef是C语言语句,其功能是用户为已有数据类型取“别名”。 例如: typedef int INTEGER; 这以后就可用INTEGER来代替int作整型变量的类型说明了,如:转载 2015-09-14 11:00:12 · 583 阅读 · 2 评论 -
socket关闭操作close和shutdown
close():只是将socket的fd引用减1,如在fork后的子进程中调用close并不会马上关闭socket;shutdown(int socket,int howto):howto:SHUT_RD关闭读,并且socket缓冲区的数据都被丢弃 SHUT_WR关闭写,关闭写之前将缓冲区中的数据全部发送,此时的socket处于半关闭状态 SHUT_RDWR同时关闭读和原创 2015-09-08 11:19:34 · 1032 阅读 · 0 评论 -
c/c++赋值“=”返回值问题
以前一直以为赋值语句返回的是一个bool,好吧我错了,直到看到这道迅雷的笔试题for(inti=10,j=1;i=j=0;i++,j--)()A 0B 1C 无限D 以上都不对在vs下做了下实验,过程及结果如图:赋值“=”原来返回的是赋的值。。网上原创 2015-09-30 15:28:12 · 1219 阅读 · 0 评论 -
简单的理解KMP算法
部分匹配表毫无疑问,KMP算法的精髓是部分匹配表。我理解KMP算法时,最大的障碍就在于是否充分明白部分匹配表里的值所代表的意义。下面我会尽可能简单地来解释这些。下面这个是“abababca”这个模板的部分匹配表:char: | a | b | a | b | a | b | c | a |index: | 0 | 1 | 2 | 3 | 4 | 5 | 6转载 2015-09-30 16:20:17 · 339 阅读 · 0 评论 -
BOOL,float,指针变量与零值的比较
if语句是C++/C语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句。本节以“与零值比较”为例,展开讨论。 4.3.1 布尔变量与零值比较 【规则4-3-1】不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。 根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如V转载 2015-11-05 17:58:20 · 1533 阅读 · 0 评论 -
一道关于内存分配的笔试题
void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); } 请问运行Test函数会有什么样的结果?原创 2015-11-05 18:04:34 · 1061 阅读 · 0 评论 -
定义一个基类shape,实现正方形,矩形,圆类
#include using namespace std; const float PI = (float)3.14159; class Shape{public: virtual float CalCircumference()=0; virtual float CalArea()=0;}; //原创 2015-11-05 18:36:50 · 15389 阅读 · 0 评论 -
如何创建一个不确定长度的数组
int size;//size表示数组长度size=;//给size赋值int * p=new int [size];//要定义不确定长度数组,必须动态分配,此处以定义int型数组为例//接下来用*(p+i)来访问数组//最后delete [] p原创 2015-11-05 18:53:37 · 42938 阅读 · 7 评论 -
可重入函数
可重入函数当捕捉到信号时,不论进程的主控制流程当前执行到哪儿,都会先跳到信号处理函数中执行,从信号处理函数返回后再继续执行主控制流程。信号处理函数是一个单独的控制流程,因为它和主控制流程是异步的,二者不存在调用和被调用的关系,并且使用不同的堆栈空间。引入了信号处理函数使得一个进程具有多个控制流程,如果这些控制流程访问相同的全局资源(全局变量、硬件资源等),就有可能出现冲突,如下面的例子所示原创 2015-09-16 14:50:57 · 448 阅读 · 0 评论 -
反转二叉树
Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9to 4 / \ 7 2 / \ / \9 6 3 1Trivia:This problem was inspired by this original tweet by Max Howe转载 2016-08-10 17:46:42 · 722 阅读 · 0 评论