linux系统数据库类型,linux下的数据类型
sys/types.h sys/types.h中文名称为基本系统数据类型。
在应用程序源文件中包含 以访问 _LP64 和 _ILP32 的定义。
此头文件还包含适当时应使用的多个基本派生类型。尤其是以下类型更为重要:
caddr_t 核心地址。
clock_t 表示系统时间(以时钟周期为单位)。
comp_t 压缩的时钟滴答。
dev_t 用于设备号。
fd_set 文件描述集。
fpos_t 文件位置。
gid_t 数组值ID.
ino_t i节点编号。
off_t 用于文件大小和偏移量。
mode_t 文件类型,文件创建模式。
pid_t 进程ID和进程组ID
ptrdiff_t 是一种带符号整型,用于对两个指针执行减法运算后所得的结果。
rlim_t 资源限制;
size_t 反映内存中对象的大小(以字节为单位)。
ssize_t 供返回字节计数或错误提示的函数使用。
time_t 以秒为单位计时。
uid_t 数值用户ID.
wchar_t 能表示所有不同的字符码。
所有这些类型在 ILP32 编译环境中保持为 32 位值,并会在 LP64 编译环境中增长为 64 位值。
实例:
pid_t int 型
pid_t的类型定义 创建进程时经常会用到进程号的类型定义:pid_t.我们都知道这个类型定义实际上就是int型。但是在linux下的c中的头文件中这个定义到底是怎么定义的呢?今天就把以前找这个定义的过程贴出来:
1.首先在/usr/include/sys/types.h中有如下定义
#include
……
#ifndef __pid_t_defined
typedef __pid_t pid_t;
# define __pid_t_defined
#endif
可以看到pid_t 其实就是__pid_t类型。
2.在/usr/include/bits/types.h中可以看到这样的定义
#include
#if __WORDSIZE == 32
……
# define __STD_TYPE __extension__ typedef
#elif __WORDSIZE == 64
……
#endif
……
__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */
可以看出__pid_t 有被定义为 __extension__ typedef __PID_T_TYPE类型的。
3.在文件/usr/include/bits/typesizes.h中可以看到这样的定义(这个文件中没有包含任何的头文件):
#define __PID_T_TYPE __S32_TYPE
可以看出__PID_T_TYPE有被定义为__S32_TYPE这种类型。
4.在文件/usr/include/bits/types.h中我们终于找到了这样的定义:
#define __S32_TYPE int
由此我们终于找到了pid_t的真实定义:实际他就是 int 类型的。
其实很多类似于这种类型的定义,就是为了不同的操作系统,不同的处理器方便吧,无非是long int unsigned 之类的
原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/51/12386551.shtml
当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类型相同
.内核提供下列数据类型, 所有类型在头文件中声明, 这个文件又被头文件所包含, 下面是 include/asm/typs.h文件
[File] /usr/src/kernels/2.6.9-22.EL-i686/include/asm-i386/types.h
#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
typedef signed char
s8
;
typedef unsigned char
u8
;
typedef signed short
s16
;
typedef unsigned short
u16
;
typedef signed int
s3
2;
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_HIGHMEM64G
typedef u64
dma_addr_t
;
#else
typedef u32
dma_addr_t
;
#endif
typedef u64
dma64_addr_t
;
#ifdef CONFIG_LBD
typedef u64
sector_t
;
#define HAVE_SECTOR_T
#endif
typedef 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
#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
#include
#ifndef __KERNEL_STRICT_NAMES
typedef __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
*/
#else
typedef __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_T
typedef __kernel_size_t
size_t
;
#endif
#ifndef _SSIZE_T
#define _SSIZE_T
typedef __kernel_ssize_t
ssize_t
;
#endif
#ifndef _PTRDIFF_T
#define _PTRDIFF_T
typedef __kernel_ptrdiff_t
ptrdiff_t
;
#endif
#ifndef _TIME_T
#define _TIME_T
typedef __kernel_time_t
time_t
;
#endif
#ifndef _CLOCK_T
#define _CLOCK_T
typedef __kernel_clock_t
clock_t
;
#endif
#ifndef _CADDR_T
#define _CADDR_T
typedef __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_T
typedef 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
#endif
typedef __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系统下调度数据库类型资源库中的kettle job
已经存在kettle的一个资源库enfo,在目录/works/wxj下面有一个job (testmailsuccess.kjb)如何实现手工在kettle外部执行此job和让系统每天定时的调用此job ...
- linux系统数据库服务器配置,Linux安装配置MariaDB数据库全程详解
MariaDB是采用Maria存储引擎的MySQL分支版本,在很多方面强于MySQL,那么在Linux下如何安装MariaDB数据库呢?下面小编就给大家介绍下Linux安装配置MariaDB数据库的方 ...
- linux防火墙文件路径,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...
- 查看linux文件系统结构,如何查看Linux系统架构类型
如何查看Linux系统架构类型 很多时候,我们都需要查看当前 Linux 系统是 32 位还是 64 位系统架构类型,本文中我将向大家推荐 5 条常用命令.无论你使用的是桌面版或是只装了文本界面的 L ...
- U盘刻录linux系统后在windows下无法识别完整容量
U盘刻录linux系统后在windows下无法识别完整容量 问题描述: 将linux系统刻录进U盘,会导致原本比如16G的U盘在windows上只能显示2m左右的容量. 这实际上是因为windows系 ...
- 连接linux系统的mysql,Linux系统MySQL开启远程连接
1.远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库.登陆数据库.mysql -uroot -p(密码). 2.创建用户用来远程连接 GRANT ALL PRIVILEGES ...
- linux系统下载经验,linux系统的学习经验首篇
1.linux打开terminal,两种最简单的办法,第一种,直接Ctrl+Alt+T:第二种,Alt+F2,输入gnome-terminal:更复杂的不建议使用. 2.linux没有盘符的概念,只有 ...
- imx6ull移植Linux系统第二篇——Linux内核的移植
imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...
- linux系统的笔记本,Linux:开源的免费操作系统_笔记本电脑_笔记本评测-中关村在线...
■linux Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议 ...
最新文章
- pycharm中导入allure提示模块不存在解决方法
- 在Windows10上安装ROS并测试
- linux命令之vmstat
- 阿里云原生数据库:POLARDB
- 手把手教你cuda5.5与VS2010的编译环境搭建
- --设备丢失故障表.
- power bi dax_M语言和Power BI中的DAX之间的差异
- 中随机打乱序列的函数_excel函数应用:如何快速制作考生座次分配表
- 《高效能程序员的修炼》——程序员的八种境界
- Power Tools for TFS 11 Beta
- window清理系统垃圾文件代码
- 期货专业术语中英文对照
- STM32开发环境安装
- 小屏幕android手机,小尺寸、小屏幕的安卓手机有哪些
- 聚观早报 | 货拉拉入局跑腿业务;苹果任命首位首席人力资源官
- 百度闪电算法实时解读
- 中国互联网的沧海桑田
- Spring项目接口偶尔报404 Not Found
- 蚂蚁金服西亭:智能金融的技术挑战与方案
- 当WHERE子句、GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序