注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[Linux笔记]符合POSIX规定的linux数据类型  

2011-06-15 12:32:51|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       POSIX-Portable Operating System Interface for Unix,要求C语言库的<linux/types.h>头文件为每个实现POSIX的机器定义一个一致的类型集。其中的每一个类型定义很容易与本地C语言区分开来,因为它们都以_t结尾。

/************************************include/linux/types.h************************************/

typedef __kernel_dev_t          dev_t;

typedef __kernel_ino_t          ino_t;

typedef __kernel_mode_t         mode_t;

typedef __kernel_nlink_t        nlink_t;

typedef __kernel_off_t          off_t;

typedef __kernel_pid_t          pid_t;

typedef __kernel_daddr_t        daddr_t;

typedef __kernel_key_t          key_t;

typedef __kernel_suseconds_t    suseconds_t;

typedef __kernel_timer_t        timer_t;

typedef __kernel_clockid_t      clockid_t;

typedef __kernel_mqd_t          mqd_t;

 

#ifdef __KERNEL__

typedef _Bool                   bool;

 

typedef __kernel_uid32_t        uid_t;

typedef __kernel_gid32_t        gid_t;

typedef __kernel_uid16_t        uid16_t;

typedef __kernel_gid16_t        gid16_t;

 

typedef unsigned long           uintptr_t;

 

#ifdef CONFIG_UID16

/* This is defined by include/asm-{arch}/posix_types.h */

typedef __kernel_old_uid_t      old_uid_t;

typedef __kernel_old_gid_t      old_gid_t;

#endif /* CONFIG_UID16 */

 

/* libc5 includes this file to define uid_t, thus uid_t can never change

 * when it is included by non-kernel code

 */

#else

typedef __kernel_uid_t          uid_t;

typedef __kernel_gid_t          gid_t;

#endif /* __KERNEL__ */

 

typedef __kernel_size_t         size_t;

 

#ifndef _SSIZE_T

#define _SSIZE_T

typedef __kernel_ssize_t        ssize_t;

#endif

 

/************************************include/asm-arm/posix_types.h************************************/

typedef unsigned long           __kernel_ino_t;

typedef unsigned short          __kernel_mode_t;

typedef unsigned short          __kernel_nlink_t;

typedef long                    __kernel_off_t;

typedef int                     __kernel_pid_t;

typedef unsigned short          __kernel_ipc_pid_t;

typedef unsigned short          __kernel_uid_t;

typedef unsigned short          __kernel_gid_t;

typedef unsigned int            __kernel_size_t;

typedef int                     __kernel_ssize_t;

typedef int                     __kernel_ptrdiff_t;

typedef long                    __kernel_time_t;

typedef long                    __kernel_suseconds_t;

typedef long                    __kernel_clock_t;

typedef int                     __kernel_timer_t;

       可以看出,为了方便数据的移植和统程的统一,在include/linux/types.h中,内核定义了类型的别名,内核可以使用*_t(如dev_t)来统一编程。然后在相关的架构里面对别名进行数据结构的具体定义。

       简要地分析几个例子:

1) dev_t

       一个包含major和minor的算术类型。对于特定的设备文件,通常可以在/dev子目录下找到。在linux下,一个dev_t可以通过major(),minor(),以及mkdev()宏来操作,这些都可以在<linux/kdev_t.h>中找到。

2) uid_t,gid_t

       整数类型,分别保存惟一的ID号或者组ID编号。

3) pid_t

       整数类型,为系统每一个进程提供惟一值。

4) id_t

       可以涵盖任务pid_t,uid_t或者gid_t的整数类型,不能分割来使用。

5) off_t

       有符号整型,以字节为单位度量文件大小。

6) size_t

       无符号整数,度量一个内存对象的大小。例如,一个字符串、数组或者缓冲区。

7) ssize_t

       有符号整数,它可以表示字节数(正),或者返回错误码(负)。

  评论这张
 
阅读(718)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018