Linux中数据类型
来源:互联网 发布:java rmi exp 编辑:程序博客网 时间:2024/06/06 13:18
当Linux内核在体系结构差异较大的平台之间移植时,会产生与数据类型相关的问题。
.在编译内核时使用 -Wall -W strict-prototypes 选项, 可以避免很多错误的发生
.内核使用的基本数据类型主要有:
int 标准C语言整数类型
u32 32位整数类型
pid_t 特定内核对象pid的类型
.在不同的CPU体系结构上,C语言的数据类型所占空间不一样。
arch char short int long ptr long-long u8 u16 u32 u64
i686
1 2 4 4 4 8 1 2 4
8
i386 1 2
4
4
4
8
1
2
4
8
alpha 1 2
4
8
8
8
1
2
4
8
armv41 1
2
4
4
4
8
1
2
4
8
ia64 1
2
4
8
8
8
1
2
4
8
m68k 1
2
4
4
4
8
1
2
4
8
mips
1
2
4
4
4
8
1
2
4
8
ppc
1
2
4
4
4
8
1
2
4
8
sparc
1
2
4
4
4
8
1
2
4
8
sparc64
1
2
4
4
4
8
1
2
4
8
.内核中的地址是unsigned long类型, 指针大小和long类型相同
.内核提供下列数据类型, 所有类型在头文件
#ifndef _I386_TYPES_H#define _I386_TYPES_H#ifndef __ASSEMBLY__typedef unsigned short umode_t;/* * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the * header files exported to user space */typedef __signed__ char __s8;typedef unsigned char __u8;typedef __signed__ short __s16;typedef unsigned short __u16;typedef __signed__ int __s32;typedef unsigned int __u32;#if defined(__GNUC__) && !defined(__STRICT_ANSI__)typedef __signed__ long long __s64;typedef unsigned long long __u64;#endif#endif /* __ASSEMBLY__ *//* * These aren't exported outside the kernel to avoid name space clashes */#ifdef __KERNEL__#define BITS_PER_LONG 32#ifndef __ASSEMBLY__#include <linux/config.h>typedef signed char s8;typedef unsigned char u8;typedef signed short s16;typedef unsigned short u16;typedef signed int s32;typedef unsigned int u32;typedef signed long long s64;typedef unsigned long long u64;/* DMA addresses come in generic and 64-bit flavours. */#ifdef CONFIG_HIGHMEM64Gtypedef u64 dma_addr_t;#elsetypedef u32 dma_addr_t;#endiftypedef u64 dma64_addr_t;#ifdef CONFIG_LBDtypedef u64 sector_t;#define HAVE_SECTOR_T#endiftypedef unsigned short kmem_bufctl_t;#endif /* __ASSEMBLY__ */#endif /* __KERNEL__ */#endif[File] /usr/src/kernels/2.6.9-22.EL-i686/include/linux/types.h#ifndef _LINUX_TYPES_H#define _LINUX_TYPES_H#ifdef __KERNEL__#include <linux/config.h>#define BITS_TO_LONGS(bits) \ (((bits)+BITS_PER_LONG-1)/BITS_PER_LONG)#define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)]#endif#include <linux/posix_types.h>#include <asm/types.h>#ifndef __KERNEL_STRICT_NAMEStypedef __u32 __kernel_dev_t;typedef __kernel_fd_set fd_set;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 __kernel_uid32_t uid_t;typedef __kernel_gid32_t gid_t;typedef __kernel_uid16_t uid16_t;typedef __kernel_gid16_t gid16_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 */#elsetypedef __kernel_uid_t uid_t;typedef __kernel_gid_t gid_t;#endif /* __KERNEL__ */#if defined(__GNUC__) && !defined(__STRICT_ANSI__)typedef __kernel_loff_t loff_t;#endif/* * The following typedefs are also protected by individual ifdefs for * historical reasons: */#ifndef _SIZE_T#define _SIZE_Ttypedef __kernel_size_t size_t;#endif#ifndef _SSIZE_T#define _SSIZE_Ttypedef __kernel_ssize_t ssize_t;#endif#ifndef _PTRDIFF_T#define _PTRDIFF_Ttypedef __kernel_ptrdiff_t ptrdiff_t;#endif#ifndef _TIME_T#define _TIME_Ttypedef __kernel_time_t time_t;#endif#ifndef _CLOCK_T#define _CLOCK_Ttypedef __kernel_clock_t clock_t;#endif#ifndef _CADDR_T#define _CADDR_Ttypedef __kernel_caddr_t caddr_t;#endif/* bsd */typedef unsigned char u_char;typedef unsigned short u_short;typedef unsigned int u_int;typedef unsigned long u_long;/* sysv */typedef unsigned char unchar;typedef unsigned short ushort;typedef unsigned int uint;typedef unsigned long ulong;#ifndef __BIT_TYPES_DEFINED__#define __BIT_TYPES_DEFINED__typedef __u8 u_int8_t;typedef __s8 int8_t;typedef __u16 u_int16_t;typedef __s16 int16_t;typedef __u32 u_int32_t;typedef __s32 int32_t;#endif /* !(__BIT_TYPES_DEFINED__) */typedef __u8 uint8_t;typedef __u16 uint16_t;typedef __u32 uint32_t;#if defined(__GNUC__) && !defined(__STRICT_ANSI__)typedef __u64 uint64_t;typedef __u64 u_int64_t;typedef __s64 int64_t;#endif/* * The type used for indexing onto a disc or disc partition. * If required, asm/types.h can override it and define * HAVE_SECTOR_T */#ifndef HAVE_SECTOR_Ttypedef unsigned long sector_t;#endif/* * The type of an index into the pagecache. Use a #define so asm/types.h * can override it. */#ifndef pgoff_t#define pgoff_t unsigned long#endif#ifdef __CHECKER__#define __bitwise __attribute__((bitwise))#else#define __bitwise#endiftypedef __u16 __bitwise __le16;typedef __u16 __bitwise __be16;typedef __u32 __bitwise __le32;typedef __u32 __bitwise __be32;typedef __u64 __bitwise __le64;typedef __u64 __bitwise __be64;#endif /* __KERNEL_STRICT_NAMES *//* * Below are truly Linux-specific types that should never collide with * any application/library that wants linux/types.h. */struct ustat { __kernel_daddr_t f_tfree; __kernel_ino_t f_tinode; char f_fname[6]; char f_fpack[6];};#endif /* _LINUX_TYPES_H */
- LINUX中数据类型
- LINUX中数据类型
- Linux中数据类型
- Linux中数据类型
- linux系统中数据类型的来源:
- linux中数据类型的表示与思考
- Linux 数据类型
- linux数据类型
- linux 数据类型
- linux-数据类型
- UNIX/LINUX中一些常用的基本系统数据类型
- linux改变文件权限&C语言中time_t数据类型
- linux c中关于今本数据类型和扩展数据类型对codesize的影响和详解
- Linux下的数据类型
- Linux c 数据类型
- Linux数据类型大小
- linux常用数据类型
- linux 网络数据类型
- jQuery 事件
- 【POJ 2391 】Ombrophobic Bovines 【floyd +二分+最大流】
- 此文无题,谨献给我,一个不忿的人
- Rhyme/Java 多态的深入理解—多态的详细分析以及多态应用之钩子函数的详细解释
- Others12_瞳距测量的方法大全
- Linux中数据类型
- 操作系统与虚拟化安全第一次作业-关键习题
- Hibernate入门到开发五之复杂属性的映射
- ServletContext&response-课堂笔记
- QtCreator配置Git方法
- 比较两个对象的属性变化
- Linux 基础操作(六)————TOP、进程管理及用户登录审计
- Spring知识整理【四】Spring AOP
- 10月10日~10月17 产品资讯