而size_t是標(biāo)準(zhǔn)C庫(kù)中定義的,應(yīng)為unsigned int。
socket_t:
數(shù)據(jù)類型"socklen_t"和int應(yīng)該具有相同的長(zhǎng)度.否則就會(huì)破壞 BSD套接字層的填充.POSIX開(kāi)始的時(shí)候用的是size_t, Linus Torvalds(他希望有更多的人,但顯然不是很多) 努力向他們解釋使用size_t是完全錯(cuò)誤的,因?yàn)樵?4位結(jié)構(gòu)中 size_t和int的長(zhǎng)度是不一樣的,而這個(gè)參數(shù)(也就是accept函數(shù)的第三參數(shù))的長(zhǎng)度必須和int一致,因?yàn)檫@是BSD套接字接口標(biāo)準(zhǔn).最終POSIX的那幫家伙找到了解決的辦法,那就是創(chuàng)造了一個(gè)新的類型"socklen_t".Linux Torvalds說(shuō)這是由于他們發(fā)現(xiàn)了自己的錯(cuò)誤但又不好意思向大家伙兒承認(rèn),所以另外創(chuàng)造了一個(gè)新的數(shù)據(jù)類型
為了增強(qiáng)程序的可移植性,便有了size_t,它是為了方便系統(tǒng)之間的移植而定義的,不同的系統(tǒng)上,定義size_t可能不一樣。
在32位系統(tǒng)上 定義為 unsigned int
也就是說(shuō)在32位系統(tǒng)上是32位無(wú)符號(hào)整形
在64位系統(tǒng)上 定義為 unsigned long
也就是說(shuō)在64位系統(tǒng)上是64位無(wú)符號(hào)整形
size_t一般用來(lái)表示一種計(jì)數(shù),比如有多少東西被拷貝等。例如:sizeof操作符的結(jié)果類型是size_t,
該類型保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小。
它的意義大致是“適于計(jì)量?jī)?nèi)存中可容納的數(shù)據(jù)項(xiàng)目個(gè)數(shù)的無(wú)符號(hào)整數(shù)類型”。
所以,它在數(shù)組下標(biāo)和內(nèi)存管理函數(shù)之類的地方廣泛使用。
而ssize_t:這個(gè)數(shù)據(jù)類型用來(lái)表示可以被執(zhí)行讀寫操作的數(shù)據(jù)塊的大小.它和size_t類似,但必需是signed.意即:它表示的是sign size_t類型的。