LDD3学习笔记(14):内核中的数据类型

简介:  #include typedef u8;typedef u16;typedef u32;typedef u64;保证是 8-位, 16-位, 32-位 和64-位 无符号整型值的类型.
  #include <linux/types.h>

typedef u8;

typedef u16;

typedef u32;

typedef u64;

保证是 8-, 16-, 32-位 和64-位 无符号整型值的类型对等的有符号类型也存在在用户空

你可用 __u8, __u16, 等等来引用这些类型.

#include <asm/page.h>

PAGE_SIZE

PAGE_SHIFT

给当前体系定义每页的字节数以及页偏移的位数对于 4 KB 页是 12, 8 KB 是 13 )的符号.

#include <asm/byteorder.h>

__LITTLE_ENDIAN

__BIG_ENDIAN 

这 个符号只有一个定义依赖体系.

#include <asm/byteorder.h>

u32 __cpu_to_le32 (u32);

u32 __le32_to_cpu (u32);

在已知字节序和处理器字节序之间转换的函数有超过 60 个这样的函数在 include/linux/

byteorder/ 中的各种文件有完整的列表和它们以何种方式定义.

#include <asm/unaligned.h>

get_unaligned(ptr);

put_unaligned(val, ptr);

一些体系需要使用这些宏保护不对齐的数据存取这些宏定义扩展成通常的指针解引用

那些允许你存取不对齐数据的体系.

#include <linux/err.h>

void *ERR_PTR(long error);

long PTR_ERR(const void *ptr);

long IS_ERR(const void *ptr);

允许错误码由返回指针值的函数返回.

#include <linux/list.h>

list_add(struct list_head *new, struct list_head *head);

list_add_tail(struct list_head *new, struct list_head *head);

list_del(struct list_head *entry);

list_del_init(struct list_head *entry);

list_empty(struct list_head *head);

list_entry(entry, type, member);

list_move(struct list_head *entry, struct list_head *head);

list_move_tail(struct list_head *entry, struct list_head *head);

list_splice(struct list_head *list, struct list_head *head);

操作环形双向链表的函数.

list_for_each(struct list_head *cursor, struct list_head *list)

list_for_each_prev(struct list_head *cursor, struct list_head *list)

list_for_each_safe(struct list_head *cursor, struct list_head *next, struct list_head *list)

list_for_each_entry(type *cursor, struct list_head *list, member)

list_for_each_entry_safe(type *cursor, type *next struct list_head *list, member)

方便的宏定义用在遍历链表上.

目录
相关文章
|
Linux
linux参数变量
位置参数变量 $n 传入参数 $* 所有的参数 整体 $@ 所有的参数 区分对待 $# 所有参数个数 预定义变量 $$当前进程号pid $!后台最后一个进程的进程号 $?最后一次执行的命令的返回状态 运算符 第一种方式 a=$((2+2)) 第二种方式 b=[表达式] 第三种方式 c=`expr 2 + 3` \* 乘法要转义
69 0
|
Shell Linux
Linux各种变量的含义
# 是传给脚本的参数个数0 是脚本本身的名字1 是传递给该shell脚本的第一个参数2 是传递给该shell脚本的第二个参数@ 是传给脚本的所有参数的列表* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当...
920 0
|
Shell Linux 存储
Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义【转】
转自:http://www.cnblogs.com/kaituorensheng/p/4002697.html 1 2 3 4 5 6 7 8 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 ...
748 0
|
Linux
Linux中ifreq 结构体分析和使用
结构原型: struct ifreq{#define IFHWADDRLEN 6 union {  char ifrn_name[IFNAMSIZ];   } ifr_ifrn;  union {  struct sockaddr ifru_addr;  struct sockaddr ifru_...
1073 0
|
存储 Linux C语言
c语言中函数(linux命令查看依赖类库),数组(内存存储是连续的内存空间),Linux下查看&amp;a,&amp;a[0],a之间的值,可变数组
1、查看一个c函数依赖的类的方式: gcc t.c -o app 使用ldd app命令查看依赖的类,截图如下: 2、库函数包括:      a、C标准库函数,(c89/c99标准定义的函数接口,由操作系统厂商去实现。)      b、第三方厂商库函数,      c:自定义库函数 3、一个简单的函数的例子: 4、linux中查看上一个程序的放回值得方式是:echo
1536 0
|
Linux 缓存 Shell
linux设置LD_LIBRARY_PATH变量
在 Linux 下,如果你写好了自己的动态链接库,需要在其它程序里调用,则需要让这些程序能找到这些动态链接库。如果设置不对,会出现类似如下的错误:test: error while loading shared libraries: libexampleso.so.0: cannot open shared object file: No such file or directory这是因为没有把动态链接库的安装路径(例如说是 /usr/local/lib )放到变量 LD_LIBRARY_PATH 里。
4360 0

热门文章

最新文章