原创 socket通信簡介

“一切皆Socket!” 話雖些許誇張,但是事實也是,現在的網絡編程幾乎都是用的socket。 ——有感於實際編程和開源項目研究。 我們深諳信息交流的價值,那網絡中進程之間如何通信,如我們每天打開瀏覽器瀏覽網頁時,瀏覽器的進程

原创 信號量 互斥鎖 條件變量的區別(講的很好,值得收藏)

信號量用在多線程多任務同步的,一個線程完成了某一個動作就通過信號量告訴別的線程,別的線程再進行某些動作(大家都在semtake的時候,就阻塞在哪裏)。而互斥鎖是用在多線程多任務互斥的,一個線程佔用了某一個

原创 socket select函數的詳細講解

原型 int select( int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, const struct timeval* timeout ); nfds

原创 PostgreSQL源碼分析: 動態Hash

1. 爲什麼需要動態hash 平常的hash,大多是下面這樣一副面孔: 圖1         一個靜態hash結構 這種Hash維護着一些桶,就是圖上左邊的部分,每一個桶中裝着hash值相同的數據。 這些具有相同hash值的

原创 postgresql存儲引擎源碼分析 五

  在上一篇文章中,我們分析完了bufpage.c,今天我們來分析頁面管理的第二個文件:itemptr.c。     這個文件裏面只有兩個函數,非常簡短,這兩個函數是對src\include\storage\itemptr.h文件中定

原创 (Socket編程中)getaddrinfo函數使用詳解

getaddrinfo是在gethostbyname系列函數不支持Ipv6的情況下逐漸催生的,其能夠處理名字到地址以及服務到端口這兩種轉換,返回一個sockaddr結構的鏈表,這些sockaddr地址結構隨後可有套接口函數(socket、

原创 使用GNU gettext實現本地化語言支持

PS:本地化過程中使用的工具會在另一篇博客中介紹,相關的gettext工具:xgettext、msginit、msgfmt、msgmerge等 爲了便於操作,不必花費太多時間去閱讀本文,我在最後簡單地列出了步驟,如果不想看文章

原创 散列表的基本概念及其運算

    參考文獻: 《數據結構(C語言版)》  嚴蔚敏 吳偉民 編著      開發平臺:Ubuntu11.04     編譯器:gcc version4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)  

原创 Select函數在Socket編程中的使用

 Select在Socket編程中還是比較重要的,可是對於初學Socket的人來說都不太愛用Select寫程序,他們只是習慣寫諸如connect、accept、recv或recvfrom這樣的阻塞程序(所謂阻塞方式block,顧名思義,

原创 三種動態hash方法

動態hash方法之一   本文將介紹三種動態hash方法。 散列是一個非常有用的、非常基礎的數據結構,在數據的查找方面尤其重要,應用的非常廣泛。然而,任何事物都有兩面性,散列也存在缺點,即數據的局部集中性會使散列的性能急劇下降,且

原创 如何重新生成PostgreSQL的國際化文件

首先Postgresql源碼中的gettext目錄工具就是國際化使用的工具,關於gettext的使用在博客中有其他文章介紹,下面文章轉自pg前輩權叔: 首先,必須在編譯前指定 --enable-nls="語言名",否則不會產生多語言

原创 postgresql存儲引擎源碼分析二

    上次我分析了PostgreSQL存儲系統頁面管理的頁面初始化函數PageInit,接下來的工作量相當大,由於源碼有幾十萬行,如果像上次一樣逐條語句分析的話,那麼整體的篇幅是相當巨大的,語言也不容易組織。因此接下來的工作我準備對於

原创 postgresql存儲引擎源碼分析四

    上一次對bufpage.c文件已經分析了一大半了,今天這裏準備對這個文件裏面剩餘的函數分析完全。     下一個函數,我們先來看看它的聲明:Size PageGetExactFreeSpace(Page page)。這個函數的

原创 Linux線程同步:互斥量、條件變量的區別

前面談過了線程鎖,下面我們在繼續研究一下線程鎖; 互斥量從本質上來說是一個鎖,對互斥量加鎖後任何其他試圖給它加鎖的線程都會被阻塞直至當前線程釋放互斥量。 同樣在設計時需要規定所有的線程必須遵守相同的數據訪問規則,只有這樣互斥機制才

原创 postgresql存儲引擎源碼分析三

    在上一次的分析中,我們分析了驗證頁面是否有效的函數,向頁面中添加元組項PageAddItem函數和一些其他函數的功能。接下來我們來分析其他的頁面操作函數。     下一個函數,聲明:void PageRestoreTempPa