变长结构体的使用
来源:互联网 发布:矩阵切换器怎么使用 编辑:程序博客网 时间:2024/05/21 22:48
在分析安卓源码过程中看到几处使用变长结构体的例子,比如下面的结构体:
struct command{ /* list of commands in an action */ struct listnode clist; int (*func)(int nargs, char **args); int nargs; char *args[1];};
下面介绍安卓是如何使用这个结构的,在解析init.rc文件的过程中,会使用这个结构体记录某些命令。
static void parse_line_action(struct parse_state* state, int nargs, char **args){ struct command *cmd; struct action *act = state->context; int (*func)(int nargs, char **args); int kw, n; if (nargs == 0) { return; } kw = lookup_keyword(args[0]); if (!kw_is(kw, COMMAND)) { parse_error(state, "invalid command '%s'\n", args[0]); return; } n = kw_nargs(kw); if (nargs < n) { parse_error(state, "%s requires %d %s\n", args[0], n - 1, n > 2 ? "arguments" : "argument"); return; } cmd = malloc(sizeof(*cmd) + sizeof(char*) * nargs); cmd->func = kw_func(kw); cmd->nargs = nargs; memcpy(cmd->args, args, sizeof(char*) * nargs); list_add_tail(&act->commands, &cmd->clist);}
比如对于如下的section:
on early-init # Set init and its forked children's oom_adj. write /proc/1/oom_adj -16 # Set the security context for the init process. # This should occur before anything else (e.g. ueventd) is started. setcon u:r:init:s0 start ueventd
会调用parse_line_action函数来解析write /proc/1/oom_adn -16,传入的参数中nargs=3,而cmd结构体中的args就是用来保存write /proc/1/oom_adj -16的。我们来看下,当解析完毕上面section时的组织结构。
0 0
- 变长结构体的使用
- 变长结构体的实现
- 变长结构体的用法
- 变长结构体的应用
- 变长结构体的几种方法
- 变长结构体的表示方法
- 变长结构体的表示方法
- 如何定义变长的TLV结构体?
- 变长结构体
- 变长结构体
- 变长结构体
- 变长结构体
- 变长结构体
- 深入浅出变长结构体
- 深入浅出变长结构体
- 变长结构体
- SOCKET 变长结构体
- 变长参数的使用
- 编程算法 - 把字符串转换为整数 代码(C)
- Jquery Post处理后不进入回调的原因及解决方法
- 【Leetcode长征系列】Search Insert Position
- android 百度地图使用tabhost 无法定位,解决办法
- 二分PKU3273
- 变长结构体的使用
- 数据库保存原来数据更新
- 验证用户的某些操作功能是否已登录
- KVM,QEMU核心分析
- 产品运营内容的建设
- MySql-pratices
- AIX测试服务器上扩展文件系统大小的过程
- iphone手机连接USB时出现需要Mobile device setup disk上的usbaapl.sys文件
- 序列化