2012-09-12 42 views
0

使用,我想知道在 此功能用於從的WinSockFARFAR *之間的差異。差異的winsock

int PASCAL FAR connect (SOCKET s, const struct sockaddr FAR * name, int len); 
+0

遠函數是當前代碼段之外的函數。 – oldrinb

+1

星號不是真的屬於'FAR',而是屬於類型。所以'name'是一個指向'struct sockaddr'的指針。在一箇舊的16位系統上,'FAR'會使它成爲一個32位指針,指向'struct sockaddr'。 –

回答

3

在這兩種情況下,它們修改指針的長度當該代碼在一個分段存儲器模型被使用。 const struct sockaddr FAR * name表示該名稱將是一個32位指針。 int PASCAL FAR connect表示指向連接函數的任何指針都將是一個32位指針。另一種選擇是NEAR,這意味着指針是16位的。

但自Windows 3.1以來,沒有人使用過分段內存模型。他們很老,我甚至不知道我使用的是正確的術語。他們太老了,我敢打賭,這裏的一半以上的常客永遠都聽不到他們。所以我認爲我可以自信地說你可以忽略任何使用FAR,只是假裝它不存在。

你從哪裏看到這個?

+0

我正在閱讀Windows套接字版本1.1。你能建議我任何最新的Winsock書 – xrcwrn

+0

如果我沒有弄錯,那本書大約20歲。認真。請嘗試使用Microsoft官方文檔:http://msdn.microsoft.com/en-us/library/windows/desktop/ms740632(v=vs.85).aspx – duskwuff

4

您可以放心地忽略FAR關鍵字,因爲它們不再被使用。

很久以前,在Win16的時代,有16位指針(NEAR)和32位指針(FAR)。他們的處理是不同的,在某些情況下並不簡單。自Win32開始以來,這種差異已經消失。 Win64也不使用分段內存模型。

同時在硬件層面上,段仍然存在於英特爾架構中。但是Windows的這些細節對用戶模式程序員(以及內核模式驅動程序編寫者)來說是完全隱藏的。

您仍然可以在頭文件中找到這些關鍵字,因爲它們不會傷害任何人。