特殊的数据类型:socklen_t、uint32_t、pthread_t

在编程的时候,发现了一些不知道什么类型的数据类型,于是整理了一下。

1.socklen_t是一种数据类型,它其实和int差不多,在32位机下,size_t和int的长度相同,都是32 bits,但在64位机下,size_t(32bits)和int(64 bits)的长度是不一样的,socket编程中的accept函数的第三个参数的长度必须和int的长度相同。于是便有了socklen_t类型。


int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

查看socklen_t定义的头文件。


cd /usr/include && grep -r socklen_t * | grep typedef

2. uint8_t\uint_16_t\uint32_t\uint64_t

_t表明这些数据类型都是根据内置类型typedef出来的,并不是新的数据类型,是我们已知类型的别名。

在C99中定义了这些数据类型。具体在:/usr/include/stdint.h    ISO C99: 7.18 Integer types


#ifndef __int8_t_defined    
# define __int8_t_defined    
typedef signed char             int8_t;     
typedef short int               int16_t;    
typedef int                     int32_t;    
# if __WORDSIZE == 64    
typedef long int                int64_t;    
# else    
__extension__    
typedef long long int           int64_t;    
# endif    
#endif    
    
    
typedef unsigned char           uint8_t;    
typedef unsigned short int      uint16_t;    
#ifndef __uint32_t_defined    
typedef unsigned int            uint32_t;    
# define __uint32_t_defined    
#endif    
#if __WORDSIZE == 64    
typedef unsigned long int       uint64_t;    
#else    
__extension__    
typedef unsigned long long int  uint64_t;    
#endif    

格式化输出:


uint16_t %hu  
uint32_t %u 
uint64_t %lu  //无符号长整型(unsigned long int) 
uint64_t %llu  (unsigned long long int)

3.size_t/ssize_t


size_t :
//无符号整型(unsigned int (32位机下),在64位机下size_t为unsigned long int),size_t一般用来计数,
//它和socklen_t一样是为了增强程序的可移植性,在不同的平台上保持和unsigned int的字节数相同

ssize_t :
//有符号整型(signed int(32位机下),在64位机下ssize_t为signed long int),ssize_t其实是 
//有符号的size_t,这个数据类型用来表示可以被执行读写操作的数据块的大小

4. pthread_t :一般用于声明线程ID

pthread_t:unsigned long int ,一般情况下是4个字节,不同的环境下,由unsigned long int的大小决定。

测试程序:

#include
int main()
{
	unsigned long int m = 1;
	unsigned int n = 1;
	unsigned long long int l  = 1;
	printf("long int %u bytes\n",sizeof(m));
	printf(" int %u bytes\n",sizeof(n));
	printf("long long int %u bytes\n",sizeof(l));
	return 0;
}

在版本信息为Linux localhost.localdomain 2.6.32-431.el6.i686下:

在visual studio 2008下:


参考文章:

http://blog.csdn.net/gowyz/article/details/6606313



你可能感兴趣的:(网络)