busybox是否以共享库形式提供?我想以编程方式使用单个应用,而不是使用system()
。我听说过libbusybox和libbb但找不到任何文档。
答案 0 :(得分:6)
在名为libbusybox(.so)
的共享表单中存在busybox库,您只需在创建menuconfig时启用它。编译后,它将在0_lib
文件夹中可用。在这个库中,你有一个很好的小函数叫int lbb_main(char **argv)
。
您需要在代码中执行以下操作:
extern int lbb_main(char **argv);
int main()
{
char* strarray[] = {"ifconfig",0};
lbb_main(strarray);
return 1;
}
您可以导入libb.h
,但这对我不起作用,因为我遇到了很多错误。
之后你只需要使用像gcc -o code code.c -Lpath_to_0_lib_fodler -lbusybox
这样的东西进行编译就可以了!
要拦截输出,你必须重新定义printf和类似的调用,但是使用诸如#define printf(...) code' in
libb.h'之类的soemthing宏显然是可行的。
你甚至可以生成不使用fork或system的busybox的shell,但是这样做还不行。
答案 1 :(得分:0)
如果您使用的是一个很小的嵌入式系统,您可以将自己的应用程序链接到busybox二进制文件中,然后您可以在没有任何动态链接器的情况下调用其函数。
如果不是,只需使用system()或fork / exec组合。
您不太可能经常调用实用程序以至于性能很重要。