关闭

嵌入式 ssize_t与size_t的联系

460人阅读 评论(0) 收藏 举报
分类:

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

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

typedef unsigned long __kernel_size_t;

typedef long __kernel_ssize_t;

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1044151次
    • 积分:18252
    • 等级:
    • 排名:第522名
    • 原创:741篇
    • 转载:523篇
    • 译文:0篇
    • 评论:105条
    最新评论