zoukankan      html  css  js  c++  java
  • size_t ssize_t loff_t 的区别

    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 类型

  • 相关阅读:
    easyui dialog 中 panel-body 高度太小出现 滚动条 的原因
    VS2017 未找到编译器可执行文件 csc.exe
    苹果个人开发者账号开发证书申请
    react-native android 报错 error calling Appregistry.runApplication
    react-native android 权限问题
    安卓证书生成
    node.js定时任务 node-schedule
    node.js 发送邮件
    在移动端点击事件触发时,闪烁并且有灰色背景
    antd-mobile使用报错
  • 原文地址:https://www.cnblogs.com/haimeng2010/p/3399650.html
Copyright © 2011-2022 走看看