您的位置:首页 > 其它

size_t ssize_t loff_t 的区别

2016-02-19 10:46 309 查看

转自:/article/9613769.html

Ssize_t 与size_t

跟踪linux源码得到以下宏:

#ifndef _SIZE_T

#define _SIZE_T

typedef __kernel_size_t size_t;

#endif

#ifndef _SSIZE_T

#define _SSIZE_T

typedef __kernel_ssize_t ssize_t;

#endif

在不同平台上,其具有不同的定义:

/* sparc 64 bit */

typedef unsigned long __kernel_size_t;

typedef long __kernel_ssize_t;

/* sparc 32 bit */

typedef unsigned int __kernel_size_t;

typedef int __kernel_ssize_t;

这就是两个类型的实际定义,从字面上意思来说:

Ssize_t = signed size_t

使用位置:

在对于缓冲区大小等等非负值的长度时一般使用 size_t;

而对于像

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);

ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);

ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);

可能失败返回< 0的函数时,则使用ssize_t;

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

另外相似的一个类型: loff_t

定义如下:

#if defined(__GNUC__)

typedef __kernel_loff_t loff_t;

#endif

是一个long long 类型

#ifdef __GNUC__

typedef long long __kernel_loff_t;

#endif

注重细节,总有一天会成功!

————————————————————华丽的分割线————————————————————————————————

个人小总结:

size_t 为 unsigned long/int 类型

ssize_t 为 long/int 类型

总而言之 ssize_t = signed size_t

loff_t 为 long long 类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: