自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下TCP编程的注意事项-陈硕《网络编程实战》总结

看陈硕的《网络编程实战》课程,感觉很有深度,收获还是非常大。Linux下TCP编程,有三个推荐做法,如果没有特殊理由,都这样做。1、使用SO_REUSEADDR标志,便于TCP Server崩溃后立刻重启在原来的端口上监听2、程序启动时忽略SIGPIPE信号,防止服务器意外退出。3、连接使用TCP_NODELAY标志,这样,避免连续发送小的tcp数据时延迟增大。

2016-08-28 21:58:55 2069

转载 The ultimate SO_LINGER page, or: why is my tcp not reliable

转自:http://blog.csdn.net/cpp_chen/article/details/29864509This post is about an obscure corner of TCP network programming, a corner where almost everybody doesn’t quite get what is going on. I used

2016-08-28 16:16:15 669

转载 如何使用multipart/form-data格式上传文件

如何使用multipart/form-data格式上传文件

2015-01-11 13:25:33 537

原创 C语言调用Python脚本中的函数

python功能强大,拥有丰富的库

2014-07-19 22:48:35 4418

原创 Linux下C编程:线程操作

Linux下多线程开发一般是

2014-07-13 19:11:21 581

原创 Linux下C编程:进程间通信(IPC)总结

(1)Linux信号:一般用于内核告诉进程某种事件发生了

2014-07-12 23:41:52 524

原创 Linux下C编程:创建和执行进程

一个监控文件发生变化,进行拷贝的程序

2014-06-25 23:45:19 482

原创 Linux下C编程:常用系统调用接口小结(2)

(1)int fcntl(int fd, int cmd, int arg);对

2014-06-22 00:31:05 478

原创 Linux下C编程:常用系统调用接口小结(1)

mode_t umask(mode_t cmask):设置当前进程的文件创建pi

2014-06-21 23:33:17 649

原创 Linux下C编程:文件拷贝 + Code Blocks/Eclipse CDT体验

代码很简单,照着书上qi

2014-06-15 19:37:39 1143 2

原创 Linux下C编程:gcc和Makefile体验

下午玩了一会Linux,准备稍微系统的学习一下Linux下的C/C++开发。其实前些年学习《自己动手写操作系统》、《程序员的自我修养》、《鸟哥的Linux私房菜》等的时候,对于Linux系统的基本原理还有基本的操作也是清楚的,但是就是不系统,最关键的是没有开发过Linux系统上的产品,不管是客户端还是服务器端。      没有使用code block或者eclipse这样的ide,体验一下用命

2014-06-14 19:23:50 566

原创 通过下标遍历std::vector,一个非常隐蔽的越界错误

对于C++标准库中vector容器的遍历是非常常见的,

2014-05-18 21:49:53 4607 2

原创 将博客搬至CSDN

由于新浪博客功能上的缺陷,不适合发表技术博客,本人将停止在新浪博客发表技术博客。后续技术博客将会在csdn博客发表,地址为:http://blog.csdn.net/hexiaomin_1984   特此公告。

2014-02-24 15:05:01 440

原创 Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境

Android应用程序的开发环境比较容易搭建,下载完AndroidSDK,在Eclipse中安装ADT插件就好了。前段时间由于要在Android上做三维程序的开发,三维开发的资源(例如几何算法等)大多数都是C++写,如果想开发出高效的程序,那就必须用到NDK,一部分代码用C/C++编写,生成本地动态链接库libXXX.so,通过Android的JNI接口调用动态库中的本地方法。NDK实际上就是一

2014-02-24 15:04:59 525

原创 一个奇特的模版函数

templatevoid destroy(T* pointer){ pointer->~T();} //上面的模版函数在STL源码中使用非常频繁,是非常奇特的,即使是使用不含析构函数的int等类型去具化//这个模版函数,也是能够数据编译和运行通过,很显然,编译器对于~T()函数的调用进行了特殊的处理。

2014-02-24 15:04:57 432

原创 OSG控制帧率的方法

osg::ref_ptrviewer = new osgViewer::Viewer; osg::ref_ptrnode;    //申请一个定时器 osg::Timer* timer = new osg::Timer; osg::Timer_t start_frame_time = 0; osg::Timer_t end_frame_time = 0;    floatsta

2014-02-24 15:04:54 1470

原创 placement new体验

#include using namespace std;class A{public: A(); A(const A&); int i;};A::A(){ i = 0; cout <<"default"}A::A(const A&){ cout <<"copy"}void main(){ A a; a.i = 1; A b; b.i = 2; 

2014-02-24 15:04:52 393

原创 判断两个整数相加是否溢出的方法

对于C/C++语言来说,分为无符号整数和有符号整数两种,几乎在所有机器中他们都是用补码表示的,判断两个整数相加是否溢出的方法如下:(1)无符号整数相加int uadd_ok(unsigned x, unsigned y){   unsigned z = x + y;   if(z <x)     return 0;    return1;} (2) 有符号整数相加,这个

2014-02-24 15:04:50 2579

原创 OpenGL与Memory&nbsp;DC

//转载自http://www.programfan.com/blog/article.asp?id=40490  用GDI绘图时,双缓冲是经常采用的技术。其中关键的一步,就是要先把图形绘制到内存设备环境中,然后拷贝到屏幕上。   OpenGL本身已经有双缓冲的功能了。但是因为开发需要,在采用OpenGL的绘图程序中,我还是需要首先在内存设备环境上绘制一个物体,然后保存为bmp图像。但是采用类

2014-02-24 15:04:48 640

原创 OpenGL显示中文-Unicode版本

void GLFont::Print3DTextW(wchar_t *string, float z){ HDC hDC =wglGetCurrentDC();         HFONThOldFont=(HFONT)::SelectObject(hDC,m_hFont); int  nListNum;                   DWORDdwChar;     

2014-02-24 15:04:46 1001

原创 关于OpenGL纹理映射的一点体会

对于glColor制定的颜色和纹理贴图本身的颜色,如何形成最终的颜色呢,经过试验可以通过  glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_REPLACE);来制定,如果不指定,纹理颜色 将于glColor制定的颜色有一个乘法。当然这也不是最终的颜色,最终的颜色要看是否启用的混合,如果  启用了混合,还将与帧缓存中的颜色进行混合。

2014-02-24 15:04:44 389

原创 OpenGL三维混合

转自:http://www.cnblogs.com/jacktu/archive/2010/06/04/1751170.html也许你迫不及待的想要绘制一个三维的带有半透明物体的场景了。但是现在恐怕还不行,还有一点是在进行三维场景的混合时必须注意的,那就是深度缓冲。深度缓冲是这样一段数据,它记录了每一个像素距离观察者有多近。在启用深度缓冲测试的情况下,如果将要绘制的像素比原来的像素更近,则

2014-02-24 15:04:40 632

原创 操作系统实践之中断程序分析

%macro hwint_master 1        call save        in al, INT_M_CTLMASK        or al, (1 %1)        out INT_M_CTLMASK, al        mov al, 20h        out 20h, al        sti        push %1  

2014-02-24 15:04:27 474

原创 操作系统实践之设置中断

在保护模式下设置中断的步骤如下:  初始化8259A中断控制器,设置IDT的内容PUBLIC void init_8259A(){ out_byte(INT_M_CTL, 0x11);   // Master 8259, ICW1. out_byte(INT_S_CTL, 0x11);   // Slave  8259, ICW1. out_byte(INT_M_CTLMASK, 

2014-02-24 15:04:25 556

原创 操作系统实践之使用Makefile

通过命令行进行编译是在太麻烦,使用Makefile就方便多了,下面这个MakeFile将编译boot.bin(引导程序)loader.bin(加载程序)和Kernel.bin(操作系统内核),编写过程比较简单,需要主要的是编译命令前需要有一个Tab键作为空格,否则好像执行不了,比如 (这里是一个Tab键)$(ASM)$(ASMBFLAGS) -o $@ $# Makefile for os

2014-02-24 15:04:23 385

原创 操作系统实践之重置GDT

为了进入保护模式,首先需要在实模式下设置GDT,并用lgdt指令保存GDT的地址,这个地址实际上是线性地址,只是在实模式中线性地址就是物理地址;当控制权转到内核时需要将GDT重新设置一下,以便在内核中设置GDT,为了保证这一点需要在设置GDT之前,通过分页机制仍然能够找到原先的GDT,即线性地址要映射到相同的物理地址中,否则就找不到原来的GDT,无法进行拷贝。在本次操作系统实践中,分页机制非常简单

2014-02-24 15:04:21 691

原创 操作系统实践之内存布局

本次操作系统实践基本上是按照《自动动手写操作系统》一书依葫芦画瓢,内存布局如下:    ;              ┃                                    ┃    ;              ┃                 .                  ┃    ;              ┃                 . 

2014-02-24 15:04:19 516

原创 操作系统实践之加载程序

Loader程序主要作用是加载Kernel.bin到内存中,这一步与引导程序加载Loader.bin进入内存是类似的,Kernel.bin是在Linux下编译的,是ELF格式的。因此,Kernel.bin加载内存后,需要将其中的代码段拷贝到相应的位置,这个位置由Kernel.bin编译时指令的入口地址决定,这些是由InitKernel完成的。Loader还做了一些事情,就是设置GDT,进入保护

2014-02-24 15:04:16 575

原创 操作系统实践之开发环境

操作系统的内核希望在Linux下通过nasm、gcc等编译,但是又不想放弃Windows下的编辑环境,因此,比较理想的方式是在Windows下编辑,然后在Linux下编译,因此需要在Windows和Linux(虚拟机)下共享文件。比较常见的方法是在linux下搭建Samba来完成http://www.linuxsir.org/main/?q=node/158,这个方法比较好,但是要求Windows

2014-02-24 15:04:14 483

原创 操作系统实践之引导程序

引导程序在引导扇区中,只有512字节的大小,引导程序难以完成许多工作,比如进入保护模式,加载内核,因此引导程序需要将这个工作交给一个拥有更大空间的程序,那就是Loader,引导程序只需将Loader加载入内存就好了,剩下的事情就由Loader来完成了。在《Linux内核完全剖析中》中可以看到,bootsect.S就是引导程序,而Setup.S则充当了Loader的功能。无论是加载Loader还是内

2014-02-24 15:04:12 482

原创 Tiny语言编译器之代码生成

代码生成是Tiny编译器的最后一项工作,代码生成的基础是语法树和符号表,遍历语法树,生成能够被TM虚拟机执行的指令,其中if语句和repeat语句需要利用emitSkip、emitBackup进行代码回填,因为只有全部语句指令生成完成以后才知道跳转地址。代码生成的源代码如下:#include "globals.h"#include "symtab.h"#include "code.h"#i

2014-02-24 15:04:10 977

原创 Tiny语言编译器之TM虚拟机接口

TM虚拟机接口用于生成TM指令,源代码如下://code.h//TM接口#ifndef _CODE_H_#define _CODE_H_#define pc 7 //程序寄存器#define mp 6 //指向数据区顶部#define gp 5 //指向数据区底部#define ac 0#define ac1 0//输出寄存器指令void emitRO(char

2014-02-24 15:04:08 732

原创 Tiny语言编译器之TM虚拟机开发

这里的虚拟机是是Tiny语言的运行环境,源代码如下:#include #include #include #include #ifndef TRUE#define TRUE 1#endif#ifndef FALSE#define FALSE 0#endif#define IADDR_SIZE 1024 //指令存储区大小#define DADDR_SIZE 1024 //数

2014-02-24 15:04:06 1738

原创 Tiny语言编译器之语义分析

Tiny语言的语义分析非常简单,第一步先遍历语法树建立符号表,但是这个符号表本身并没有太大的用处,只是为变量分配了内存的地址,为代码生成做准备;第二步是类型检查,主要对if语句、repeat语句的条件进行检查,必须是Boolean类型的,另外有些表达式要求是Integer类型,类型检查采用后序遍历的方式。语义分析的源代码如下:#include "globals.h"#include "symt

2014-02-24 15:04:04 1810

原创 Tiny语言编译器之符号表

Tiny语言编译器的符号表还是很简单的,主要的是写了一个简单的哈希表,共有211个桶,采用拉链法,用另外一个链表记录了一个符号所出现的所有行号,源代码如下:#include #include #include #include "symtab.h"#define SHIFT 4#define SIZE 211//哈希函数static int hash(char* key)

2014-02-24 15:04:02 664

原创 Dreamweaver中字符编码的问题

Dreamweaver中默认的字符编码是gb2312,因此,如果都使用Dreamweaver中“文件”->“新建”的方式创建html页和JavaScript页,网页不会有字符编码的问题。用Dreamweaver创建的html,中的会显示如下:<metahttp-equiv="Content-Type" content="text/html; charset=gb2312"/>   其中,

2014-02-24 15:03:59 981

原创 利用Yacc生成LR语法分析器的关键点…

实际上利用Yacc生成LR语法分析器(一般是Lookahead分析方法)还是比较简单的,而且写一个文法满足Yacc的要求也非常容易,主要的工作量体现在一个产生式被识别后的动作如何编写,尤其是有时候需要在一个产生式中嵌入一个动作,这个动作产生的时机是什么,产生这个动作时当前的token是什么一定要非常清楚,通过这几天的研究,基本上对这个问题已经有了一个了解,这里做一些总结。 首先,Yacc中判

2014-02-24 15:03:57 1052

原创 Tiny语言编译器开发之语法分析(利…

采用自底向上的LR分析方法,Yacc输入文件yyparser.y如下:%{#define YYPARSER#include "globals.h"#include "util.h"#include "scan.h"#include "parse.h"#define YYSTYPE TreeNode *static char * savedName;static int saved

2014-02-24 15:03:55 732

原创 JavaScript滚动信息的CSS要点

如果用jQuery做滚动信息,在《锋利的jQuery》书中已经讲解得很详细啦,书中的源代码可以在网上下载的。但,其中,有一些关键的CSS要点,如果不使用的话,是不能达到很好的滚动效果的。   假如有很多信息,每时每刻要显示4行滚动信息,html如下:<divclass="scrollNews">            <ahref="#">甜美宽松毛衣金秋一定红。       

2014-02-24 15:03:53 334

原创 Tiny语言编译器开发之语法分析

采用自顶向下的分析方法中的递归下降分析法,手工编写语法分析器,源代码如下:#include "globals.h"#include "util.h"#include "scan.h"#include "parse.h"static TokenType token; //当前获取的tokenstatic TreeNode* stmt_sequence();static TreeNod

2014-02-24 15:03:51 1343

空空如也

空空如也

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

TA关注的人

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