linux 内核库函数 【转】
转自:http://blog.chinaunix.net/uid-20321537-id-1966892.html
当编写驱动程序时,一般情况下不能使用C标准库的函数。Linux内核也提供了与标准库函数功能相同的一些函数,但二者还是稍有差别。
|
类别 |
函数名 |
功能 |
函数形成 |
参数 |
描述 |
|
字符串转换 |
simple_strtol |
把一个字符串转换为一个有符号长整数 |
long simple_strtol (const char * cp, char ** endp, unsigned int base) |
cp指向字符串的开始,endp为指向要分析的字符串末尾处的位置,base为要用的基数。 |
|
|
simple_strtoll |
把一个字符串转换为一个有符号长长整数 |
long long simple_strtoll (const char * cp, char ** endp, unsigned int base) |
cp指向字符串的开始,endp为指向要分析的字符串末尾处的位置,base为要用的基数。 |
||
|
simple_strtoul |
把一个字符串转换为一个无符号长整数 |
long long simple_strtoul (const char * cp, char ** endp, unsigned int base) |
cp指向字符串的开始,endp为指向要分析的字符串末尾处的位置,base为要用的基数。 |
||
|
simple_strtoull |
把一个字符串转换为一个无符号长长整数 |
long long simple_strtoull (const char * cp, char ** endp, unsigned int base) |
cp指向字符串的开始,endp为指向要分析的字符串末尾处的位置,base为要用的基数。 |
||
|
vsnprintf |
格式化一个字符串,并把它放在缓存中。 |
int vsnprintf (char * buf, size_t size, const char * fmt, va_list args) |
buf为存放结果的缓冲区, size为缓冲区的大小,fmt为要使用的格式化字符串,args为格式化字符串的参数。 |
||
|
snprintf |
格式化一个字符串,并把它放在缓存中。 |
int snprintf (char * buf, size_t size, const char * fmt, ... ...) |
buf为存放结果的缓冲区, size为缓冲区的大小,fmt为格式化字符串,使用@…来对格式化字符串进行格式化,…为可变参数。 |
||
|
vsprintf |
格式化一个字符串,并把它放在缓存中。 |
int vsprintf (char * buf, const char * fmt, va_list args) |
buf为存放结果的缓冲区, size为缓冲区的大小,fmt为要使用的格式化字符串,args为格式化字符串的参数。 |
||
|
sprintf |
格式化一个字符串,并把它放在缓存中。 |
int sprintf (char * buf, const char * fmt, ... ...) |
buf为存放结果的缓冲区, size为缓冲区的大小,fmt为格式化字符串,使用@…来对格式化字符串进行格式化,…为可变参数。 |
||
|
字符串操作 |
strcpy |
拷贝一个以NUL结束的字符串 |
char * strcpy (char * dest, const char * src) |
dest为目的字符串的位置, src为源字符串的位置。 |
|
|
strncpy |
拷贝一个定长的、以NUL结束的字符串 |
char * strncpy (char * dest, const char * src, size_t count) |
dest为目的字符串的位置, src为源字符串的位置,count为要拷贝的最大字节数 |
与用户空间的strncpy不同,这个函数并不用NUL填充缓冲区,如果与源串超过count,则结果以非NUL结束 |
|
|
strcat |
把一个以NUL结束的字符串添加到另一个串的末尾 |
char * strcat (char * dest, const char * src) |
dest为要添加的字符串, src为源字符串。 |
||
|
strncat |
把一个定长的、以NUL结束的字符串添加到另一个串的末尾 |
char * strncat (char * dest, const char * src, size_t count) |
dest为要添加的字符串, src为源字符串,count为要拷贝的最大字节数 |
注意,与strncpy,形成对照,strncat正常结束。 |
|
|
strchr |
在一个字符串中查找第一次出现的某个字符 |
char * strchr (const char * s, int c) |
s为被搜索的字符串,c为待搜索的字符。 |
||
|
strrchr |
在一个字符串中查找最后一次出现的某个字符 |
char * strrchr (const char * s, int c) |
s为被搜索的字符串,c为待搜索的字符。 |
||
|
strlen |
给出一个字符串的长度 |
size_t strlen (const char * s) |
s为给定的字符串 |
||
|
strnlen |
给出给定长度字符串的长度 |
size_t strnlen (const char * s, size_t count) |
s为给定的字符串 |
||
|
strpbrk |
在一个字符串中查找第一次出现的一组字符 |
char * strpbrk (const char * cs, const char * ct) |
cs为被搜索的字符串,ct为待搜索的一组字符 |
||
|
strtok |
把一个字符串分割为子串 |
char * strtok (char * s, const char * ct) |
s为被搜索的字符串,ct为待搜索的子串 |
注意,一般不提倡用这个函数,而应当用strsep |
|
|
memset |
用给定的值填充内存区 |
void * memset (void * s, int c, size_t count) |
s为指向内存区起始的指针,c为 要填充的内容,count为内存区的大小 |
I/O空间的访问不能使用memset,而应当使用memset_io。 |
|
|
bcopy |
把内存的一个区域拷贝到另一个区域 |
char * bcopy (const char * src, char * dest, int count) |
src为源字符串,dest为目的字符串,而count为内存区的大小 |
注意,这个函数的功能与memcpy相同,这是从BSD遗留下来的,对I/O空间的访问应当用memcpy_toio或memcpy_fromio |
|
|
memcpy |
把内存的一个区域拷贝到另一个区域 |
void * memcpy (void * dest, const void * src, size_t count) |
dest为目的字符串,Src为源字符串,而count为内存区的大小 |
对I/O空间的访问应当用memcpy_toio或memcpy_fromio |
|
|
memmove |
把内存的一个区域拷贝到另一个区域 |
void * memmove (void * dest, const void * src, size_t count) |
dest为目的字符串,Src为源字符串,而count为内存区的大小 |
memcpy和memmove处理重叠的区域,而该函数不处理。 |
|
|
memcmp |
比较内存的两个区域 |
int memcmp (const void * cs, const void * ct, size_t count) |
cs为一个内存区,ct为另一个内存区,而count为内存区的大小 |
||
|
memscan |
在一个内存区中查找一个字符 |
void * memscan (void * addr, int c, size_t size) |
addr为内存区,c为要搜索的字符,而size为内存区的大小 |
返回c第一次出现的地址,如果没有找到c,则向该内存区传递一个字节。 |
|
|
strstr |
在以NUL结束的串中查找第一个出现的子串 |
char * strstr (const char * s1, const char * s2) |
s1为被搜索的串,s2为待搜索的串。 |
||
|
memchr |
在一个内存区中查找一个字符 |
void * memchr (const void * s, int c, size_t n) |
s为内存区,为待搜索的字符,n为内存的大小 |
返回c第一次出现的位置,如果没有找到c,则返回空。 |
|
|
位操作 |
set_bit |
在位图中原子地设置某一位 |
void set_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址 |
这个函数是原子操作,如果不需要原子操作,则调用__set_bit函数,nr可以任意大,位图的大小不限于一个字。 |
|
__set_bit |
在位图中设置某一位 |
void __set_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址 |
||
|
clear_bit |
在位图中清某一位 |
void clear_bit (int nr, volatile void * addr) |
nr为要清的位,addr为位图的起始地址 |
该函数是原子操作,但不具有加锁功能,如果要用于加锁目的,应当调用smp_mb__before_clear_bit或smp_mb__after_clear_bit函数,以确保任何改变在其他的处理器上是可见的。 |
|
|
__change_bit |
在位图中改变某一位 |
void __change_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址。 |
与change_bit不同,该函数是非原子操作。 |
|
|
change_bit |
在位图中改变某一位 |
void change_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址。 |
||
|
test_and_set_bit |
设置某一位并返回该位原来的值 |
int test_and_set_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址。 |
该函数是原子操作 |
|
|
__test_and_set_bit |
设置某一位并返回该位原来的值 |
int __test_and_set_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址。 |
该函数是非原子操作,如果这个操作的两个实例发生竞争,则一个成功而另一个失败,因此应当用一个锁来保护对某一位的多个访问。 |
|
|
test_and_clear_bit |
清某一位,并返回原来的值 |
int test_and_clear_bit (int nr, volatile void * addr); |
nr为要设置的位,addr为位图的起始地址。 |
该函数是原子操作 |
|
|
__test_and_clear_bit |
清某一位,并返回原来的值 |
int __test_and_clear_bit (int nr, volatile void * addr); |
nr为要设置的位,addr为位图的起始地址。 |
该函数为非原子操作 |
|
|
test_and_change_bit |
改变某一位并返回该位的新值 |
int test_and_change_bit (int nr, volatile void * addr) |
nr为要设置的位,addr为位图的起始地址。 |
该函数为原子操作 |
|
|
test_bit |
确定某位是否被设置 |
int test_bit (int nr, const volatile void * addr) |
nr为要测试的第几位,addr为位图的起始地址。 |
||
|
find_first_zero_bit |
在内存区中查找第一个值为0的位 |
int find_first_zero_bit (void * addr, unsigned size) |
addr为内存区的起始地址,size为要查找的最大长度 |
返回第一个位为0的位号 |
|
|
find_next_zero_bit |
在内存区中查找第一个值为0的位 |
int find_next_zero_bit (void * addr, int size, int offset) |
addr为内存区的起始地址,size为要查找的最大长度,offset开始搜索的起始位号。 |
||
|
ffz |
在字中查找第一个0 |
unsigned long ffz (unsigned long word); |
word为要搜索的字。 |
||
|
ffs |
查找第一个已设置的位 |
int ffs (int x) |
x为要搜索的字。 |
这个函数的定义方式与Libc中的一样。 |
|
|
hweight32 |
返回一个N位字的加权平衡值 |
hweight32 ( x) |
x为要加权的字 |
一个数的加权平衡是这个数所有位的总和。 |
linux 内核库函数 【转】的更多相关文章
- linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...
- LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...
- Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...
- Linux 内核概述 - Linux Kernel
Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...
- Linux内核--内核数据类型
转自:http://www.linuxidc.com/Linux/2013-12/93637.htm 将Linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关.坚持使用严格的数 ...
- Linux系统的理解及学习Linux内核的心得
作业列表 (点击作业跳转) linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核 ...
- linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程
1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...
- 《Linux及安全》期中总结&《Linux内核分析》期终总结
[5216 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK NINE ...
- 20169212《Linux内核原理与分析》课程总结
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...
随机推荐
- POJ:3259-Wormholes(最短路判断负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 58153 Accepted: 21747 Descripti ...
- Django笔记 —— 视图
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- swift中的正则表达式
swift中的t正则表达式 正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串" ...
- Percona-Tookit工具包之pt-summary
Preface As a dba,We are obliged to master several basic tools(such as vmstat,top,netstat,ios ...
- window.parent 、window.top及window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口. 1. window.self ...
- web自动化测试,定位不到元素的原因及解决方案(持续更新中2018年9月29日)
主要讲自己在实战中遇到的坑: 1.动态id定位不到元素 分析原因:每次打开页面,ID都会变化.用ID去找元素,每次刷新页面ID都会发生变化. 解决方案:推荐使用xpath的相对路径方法或者cssSel ...
- 更改maven本地仓库地址
1.进入maven安装conf文件中,编辑settings.xml文件,新增图中的圈出的内容(我想要存放的地址是D:\HMY\m2\repository) 2.复制settings.xml文件至D:\ ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...
- [OpenCV] Ptr类模板
1.C++泛型句柄类 我们知道在包含指针成员的类中,需要特别注意类的复制控制,因为复制指针时只复制指针中的地址,而不会复制指针指向的对象.这将导致当两个指针同时指向同一对象时,很可能一个指针删除了一对 ...
- 【转】PHP对象在内存中的分配
对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段.堆空 ...