qkc庫是windows下的libc庫,相容posix標準,並實現linux下特有的api介面。它可以被visual studio直接使用,用來編譯linux下的c原始碼。經過半年的開發,基本完成**總體框架,還沒有經過除錯驗證,也算告一段落。qkc的實現參考了glibc/linux/cygwin以及網路上的許多部落格,感謝這些原始碼的作者。
在windows和linux的底層api中,功能上基本相似,但在細節處中有諸多不同,為了完全相容,除了需要在效能上容忍損失,還是有不少難點。
1、難度最大的是跨程序通訊。linux下的跨程序通訊方式,windows都有對應的介面,共享記憶體,訊號量,互斥量。不同的是,linux是以乙個整型變數來標識,而windows是以字串來標識,導致這需要乙個對映管理器來管理這個對應關係。乙個取巧的辦法是,讓這些字串按照prefix + id的格式拼接而成,就可以省去管理。
linux下當程序退出時,會自動釋放這些資源。但是qkc因為是使用者層的庫,在系統api上做了一層封裝。當windows退出時,會自動釋放系統資源,不會自動釋放qkc為封裝而申請的資源。其他程序也無法感知該程序的退出,如果此時在競爭乙個鎖,就可能導致死鎖。
2、檔案系統。在linux下一切皆檔案,比如跨程序通訊的/dev/shm,比如管理程序的/proc。在windows下,提供普通檔案的介面,這些資訊涉及到全系統公共資訊,只有乙個動態庫中難以模擬。這個問題,其實和跨程序通訊類似,需要有個全域性性的管理器。
3、epoll的實現。和epoll對應的是iocp,但是epoll模型是reactor模式,而iocp是preactor模式。這個模擬方法在《epoll移植到windows的可能性》中提到。與此類似的,還有inotify。inotify的難點同時也和檔案系統相關,/proc/sys/fs/inotify其實也是乙個虛擬檔案系統。
4、syscall,syscall的實現並沒有特別的難度,關鍵是量大,有幾百個。
5、errno和getlasterror的對應關係,和syscall一樣,量大而且還不能完全匹配。
HR開發總結
日期 2009 04 24 一 邏輯資料 1 邏輯資料定義 邏輯資料庫 是 abap 4 報表讀取和 處理資料的 方法。每個 abap 4報表都鏈結 到報表屬性指定的邏輯資料庫中。邏輯資料庫有個三字 的名稱 例 如,kdf 其最後字母表示應用 定義報表屬性時如果不指定邏輯資料庫的名稱,則系統使用控制...
開發細節總結
多位元組字元 英文1個位元組,中文2個位元組 unicode 英文2位元組 中文2位元組.vs 2005之後專案使用的是unicode字符集 unicode下資料型別轉換 1 cstring轉int cstring b 123 int i i ttoi b 在使用多字符集下 atoi array t...
IOS開發總結
ios開發總結 1 搞清楚生命週期,didfinishlauch init loadview viewdidload 3 在導航欄設定背景的時候,要注意不同版本的方法是不一樣的,5.0一下的是通過draw方法來設定的,而5.0後可以直接呼叫setbackgroundimage方法。所以程式應該先判斷...