http://blog.csdn.net/lalor/article/details/7426184

首先,我非常肯定以 及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区别?其实就是一样的。size_t 就是无符号型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的编译器或系统可能会有区别,主要是因为在32位机器上int和long是一样的。在64位没有测试,但是参见百度百 科,size_t 在64位下是64位,那么size_t的正确定义应该是typedef unsigned long size_t。

ssize_t:


前一阵子,上Unix程序设计,问老师说ssize_t到底是什么数据类型,老师说,你直接用就好了,真要知道是什么数据类型,可以去types.h里去
看一下,回去以后找了一下没有找到就放弃了,今天写代码又遇到这个问题,我觉得不是办法,还是得弄清除它到底是什么类型。当然了,对于ssize_t到底
是什么数据类型,不知道问题也不大,但是对于控制欲强和好奇心重的人,总是想知道的,而且我相信,知道了总会有好处的,写代码的时候心里有底。

查找步骤:

1.
包含头文件的时候是这么做的:#include <sys/types.h>,执行locate
types.h跳出一堆文件,这也是为什么我第一次尝试失败的原因。首先执行locate
sys/types.h,就可以找到types.h的存放位置了。

2. 打开types.h,搜索 ssize_t,得到如下结果

#ifndef __ssize_t_defined
typedef __ssize_t ssize_t;
# define __ssize_t_defined

3. 再搜索__ssize_t 就找不到任何有价值的信息了,观察文件发现,该文件还包含了其他头文件,也就是 #include <bits/types.h>,再次打开bits/types.h

4. 搜索__ssize_t 找到了这么一条语句:__STD_TYPE __SSIZE_T_TYPE __ssize_t; 搜索__STD_TYPE_SSIZE 又找到了这样一句话:

/* We want __extension__ before typedef's that use nonstandard base types
   such as `long long' in C89 mode.  */
# define __STD_TYPE             __extension__ typedef

也就是
说,__STD_TYPE __SSIZE_T_TYPE __ssize_t;这条语句其实就是 typedef __SSIZE_T_TYPE
__ssize_t,那么重点就是找到__SSIZE_T_TYPE了,搜索__SIZE_T_TYPE,又没有什么有价值的信息了,与步骤3类似,我们
又找到了这条语句:#include <bits/typesizes.h>
 ,打开typesizes.h文件,搜索__SSIZE_T_TYPE,很轻松的就找到了#define
__SSIZE_T_TYPE          __SWORD_TYPE,也就是说最开始的 __STD_TYPE __SSIZE_T_TYPE
__ssize_t; 这条语句其实就是 typedef __SWORD_TYPE
 __ssize_t,typesize.h文件里找不到__SWORD_TYPE,于是我们又回到了bit/types.h中,结果终于出现了。

5.在bit/types.h中很轻松的就找到了下面这几行语句。

#if __WORDSIZE == 32
# define __SQUAD_TYPE           __quad_t
# define __UQUAD_TYPE           __u_quad_t
# define __SWORD_TYPE           int
# define __UWORD_TYPE           unsigned int
# define __SLONG32_TYPE         long int
# define __ULONG32_TYPE         unsigned long int
# define __S64_TYPE             __quad_t
# define __U64_TYPE             __u_quad_t
/* We want __extension__ before typedef's that use nonstandard base types
   such as `long long' in C89 mode.  */
# define __STD_TYPE             __extension__ typedef
#elif __WORDSIZE == 64
# define __SQUAD_TYPE           long int
# define __UQUAD_TYPE           unsigned long int
# define __SWORD_TYPE           long int
# define __UWORD_TYPE           unsigned long int
# define __SLONG32_TYPE         int
# define __ULONG32_TYPE         unsigned int
# define __S64_TYPE             long int
# define __U64_TYPE             unsigned long int
/* No need to mark the typedef with __extension__.   */
# define __STD_TYPE             typedef
#else
# error
#endif

我们几乎都可以猜到__WORDSIZE是什么意思了,它的定义在#include
<bits/wordsize.h>中,表示计算机系统是几位的。从上面我们知道,在32位计算机系统中,ssize_t
是int型,占4个字节,在64位计算机系统中,ssize_t是long int 型,占8个字节。

size_t:


晕,size_t的资料居然找了半天。size_t大家都知道,是无符号整型,在/usr/include/i386-linux-gnu/sys/stddef.h下看到这么几条语句:

/* __size_t is a typedef on FreeBSD 5!, must not trash it. */
#else
#define __size_t
#endif
#ifndef __SIZE_TYPE__
#define __SIZE_TYPE__ long unsigned int
#endif
#if !(defined (__GNUG__) && defined (size_t))
typedef __SIZE_TYPE__ size_t;
#ifdef __BEOS__
typedef long ssize_t;

可以肯定的是,size_t是无符号整型,至于是long型,还是int型,可能不同的编译器有不同的定义,我这里没有64位的机器,无法验证。这也验证了我们上面所说的ssize_t其实就是一个long。

下面的是一点附加资料,证明我找到的是正确的。:-)

一个基本的无符号整数的C / C + +类型。 它是sizeof操作符返回的结果类型。 该类型的大小是选择,因此,它可以存储在理论上是可能的任何类型的数组的最大大小。 在32位系统为size_t将采取32位和64位 - 64位。

参考资料:http://baike.baidu.com/view/3236587.htm

Data Type: ssize_t 
      This data type is used to represent the sizes of blocks that can
be read or written in a single operation. It is similar to size_t, but
must be a signed type.参考资料:http://www.delorie.com/gnu/docs/glibc/libc_239.html

Unix编程之size_t、ssize_t的更多相关文章

  1. Linux/Unix C编程之的perror函数,strerror函数,errno

    #include <stdio.h> // void perror(const char *msg); #include <string.h> // char *strerro ...

  2. unix下网络编程之I/O复用(三)

    poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...

  3. iPhone socket 编程之BSD Socket篇

    iPhone socket 编程之BSD Socket篇 收藏在进行iPhone网络通讯程序的开发中,不可避免的要利用Socket套接字.iPhone提供了Socket网络编程的接口CFSocket, ...

  4. 网络编程之C10K

    网络编程之C10K 虽然在过去的十几年里C10K问题已经可以很好的解决,但学习网络编程时研究C10K问题仍然价值巨大,因为技术的发展都是有规律和线索可循的,了解C10K问题及其解决思路,通过举一反三, ...

  5. C++混合编程之idlcpp教程Python篇(7)

    上一篇在这 C++混合编程之idlcpp教程Python篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与PythonTutorial4工程相似,工程PythonTutorial5中,同 ...

  6. C++混合编程之idlcpp教程Lua篇(7)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(6) 第一篇在这 C++混合编程之idlcpp教程(一) 与LuaTutorial4工程相似,工程LuaTutorial5中,同样加入了四个文件: ...

  7. C++混合编程之idlcpp教程Python篇(6)

    上一篇在这 C++混合编程之idlcpp教程Python篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程PythonTutorial4中加入了四个文件:PythonTutorial4 ...

  8. C++混合编程之idlcpp教程Lua篇(6)

    上一篇在这 C++混合编程之idlcpp教程Lua篇(5) 第一篇在这 C++混合编程之idlcpp教程(一) 工程LuaTutorial4中加入了四个文件:LuaTutorial4.cpp, Tut ...

  9. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...

随机推荐

  1. 【Qt】Qt Creator快捷键【转】

    简介 Qt Creator中提供了各种快捷键来加快开发进程. 如果需要查看或自定义快捷键,选择工具->选项->环境->键盘.快捷键按类别列出,可以在过滤器(Filter)处输入命令名 ...

  2. 冒泡排序(Bubble Sort)

    常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...

  3. apk反编译之二——smali学习

    在apk被反编译后,原来的java程序会以smali文件呈现.这就需要补充smali的知识.依旧参考官方文档,择日我将把官方文档做一下翻译.今日先贴出链接地址: 1:了解smali字节码的寄存器 请参 ...

  4. Hibernate 插入,修改,删除,查询语句

    /* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...

  5. malloc函数

    C语言中,使用malloc函数向内存中动态申请空间. 函数的原型是extern void *malloc(unsigned int num_bytes); 可见,函数返回的是指针类型,参数是要申请的空 ...

  6. 银行HR:寒门再难出贵子

    银行HR:寒门再难出贵子来源:金融行业网 2013 年 8 月 6 日 来源:天涯社区 作者:永乐大帝二世 本文是一位银行的HR写的,他工作了10年,接待了一群到银行实习的实习生,然后观察他们发生的好 ...

  7. JavaScript Tutorial

    JavaScript Tutorial http://javascript.info/root Object.create rabit.hasOwnProperty('eats') Object.ge ...

  8. div+css登陆界面案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 设置NODE_ENV=production

    NodeJS - Express 4.0下设置环境变量NODE_ENV=production,并不是修改文件的配置信息,而是通过命令行来实现. 首先在命令行下进入项目的目录,然后先后执行如下命令: s ...

  10. Halcon学习笔记之缺陷检测(二)

    例程:detect_indent_fft.hdev 说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步: 首先,我们用高斯滤波器构造一个合适的滤波 ...