char *kstrdup(const char *s, gfp_t gfp)用于申请一段内存将形参s的内容copy到这段新申请的内存中.
其源码分析如下:
/**
* kstrdup - allocate space for and copy an existing string
* @s: the string to duplicate
* @gfp: the GFP mask used in the kmalloc() call when allocating memory
*/
char *kstrdup(const char *s, gfp_t gfp)
{
size_t len;
char *buf;
#形参s 为null的话,就直接返回null
if (!s)
return NULL;
#得到字符串的长度
len = strlen(s) + 1;
#根据形参给定的flag gfp 来申请长度为len的内存
buf = kmalloc_track_caller(len, gfp);
if (buf)
#如果buf 为null的话,就通过memcpy 将形参s中的内容copy到新申请的buf中
memcpy(buf, s, len);
#返回buf,注意如果kmalloc_track_caller 如果申请到的buf为null的话,通过这里也会返回null
#所以这个函数返回null 就用两种情况,一种是新参s为null,一种是没有申请到内存为null
return buf;
}
内存管理API之kstrdup
最新推荐文章于 2024-04-03 15:08:38 发布