原创 操作系統實踐之重置GDT

   爲了進入保護模式,首先需要在實模式下設置GDT,並用lgdt指令保存GDT的地址,這個地址實際上是線性地址,只是在實模式中線性地址就是物理地址;當控制權轉到內核時需要將GDT重新設置一下,以便在內核中設置GDT,爲了保證這一點需要

原创 利用Yacc生成LR語法分析器的關鍵點…

  實際上利用Yacc生成LR語法分析器(一般是Look ahead分析方法)還是比較簡單的,而且寫一個文法滿足Yacc的要求也非常容易,主要的工作量體現在一個產生式被識別後的動作如何編寫,尤其是有時候需要在一個產生式中嵌入一個動作,這

原创 關於OpenGL紋理映射的一點體會

  對於glColor制定的顏色和紋理貼圖本身的顏色,如何形成最終的顏色呢,經過試驗可以通過   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);來制定,如果不指定,

原创 Tiny語言編譯器之代碼生成

  代碼生成是Tiny編譯器的最後一項工作,代碼生成的基礎是語法樹和符號表,遍歷語法樹,生成能夠被TM虛擬機執行的指令,其中if語句和repeat語句需要利用emitSkip、emitBackup進行代碼回填,因爲只有全部語句指令生成完

原创 Tiny語言編譯器之TM虛擬機開發

  這裏的虛擬機是是Tiny語言的運行環境,源代碼如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #ifndef TRU

原创 JavaScript滾動信息的CSS要點

    如果用jQuery做滾動信息,在《鋒利的jQuery》書中已經講解得很詳細啦,書中的源代碼可以在網上下載的。但,其中,有一些關鍵的CSS要點,如果不使用的話,是不能達到很好的滾動效果的。     假如有很多信息,每時每刻要顯示4

原创 Dreamweaver中字符編碼的問題

     Dreamweaver中默認的字符編碼是gb2312,因此,如果都使用Dreamweaver中“文件”->“新建”的方式創建html頁和JavaScript頁,網頁不會有字符編碼的問題。用Dreamweaver創建的html

原创 Linux下C編程:文件拷貝 + Code Blocks/Eclipse CDT體驗

    代碼很簡單,照着《精通Linux C編程》書上敲的,就是實現了一個copy文件的命令: /* ===================================================================

原创 一個奇特的模版函數

template<class T> void destroy(T* pointer) {  pointer->~T(); }   //上面的模版函數在STL源碼中使用非常頻繁,是非常奇特的,即使是使用不含析構函數的int等類型去具化 /

原创 Linux下C編程:線程操作

Linux下多線程開發一般是採用pthread庫,因此編譯項目的時候需要鏈接pthread庫纔可以。 創建線程很簡單,int pthread_create(pthread_t*thread, pthread_attr_t *attr, .

原创 Linux下C編程:常用系統調用接口小結(1)

(1)mode_t umask(mode_t cmask):設置當前進程的文件創建屏蔽碼,這樣通過create或者open函數創建文件時,傳入的文件權限需要和這個值進行位運算,屏幕某些權限。 (2)int chmod(const char

原创 Linux下C編程:進程間通信(IPC)總結

(1)Linux信號: 某種信號相當於某種事件,一般用於內核告訴進程某種事件發生了,進程通過signal函數註冊信號的處理函數。我個人體會在用戶態中兩個進程之間用信號進行進程間通信應該不是一個特別好的方法,限制比較多。 (2)匿名管道:

原创 OpenGL與Memory&nbsp;DC

  //轉載自http://www.programfan.com/blog/article.asp?id=40490   用GDI繪圖時,雙緩衝是經常採用的技術。其中關鍵的一步,就是要先把圖形繪製到內存設備環境中,然後拷貝到屏幕上。 

原创 如何使用multipart/form-data格式上傳文件

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

原创 OSG控制幀率的方法

 osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;  osg::ref_ptr<osg::Node> node;      //申請一個定時器  osg::