Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash作为C库?_C_Bash - Fatal编程技术网

Bash作为C库?

Bash作为C库?,c,bash,C,Bash,我有一个项目,我想做一些在bash中无关紧要的事情,但是我想要/需要一个没有外部依赖的二进制文件。那么,是否有人编写了一个自包含的lib(即,不是system()的包装器),允许您从C内部执行类似bash的操作 现在,我希望需要的东西是:cp,rm,wget,tftp,ar,tar,guzip,也许还有dpkg,但我想我可以跳过这一步 回答这些评论:我正在寻找一个静态链接的忙框,但是我不需要一个shell文件作为它的程序,我不自动使用的东西甚至连链接都没有。你需要。我完全同意。此外,如果您获得

我有一个项目,我想做一些在bash中无关紧要的事情,但是我想要/需要一个没有外部依赖的二进制文件。那么,是否有人编写了一个自包含的lib(即,不是system()的包装器),允许您从C内部执行类似bash的操作

现在,我希望需要的东西是:
cp
rm
wget
tftp
ar
tar
guzip
,也许还有
dpkg
,但我想我可以跳过这一步



回答这些评论:我正在寻找一个静态链接的忙框,但是我不需要一个shell文件作为它的程序,我不自动使用的东西甚至连链接都没有。

你需要。

我完全同意。此外,如果您获得了dpkg的源代码,您将可以访问它的大部分功能。

您有很多自定义需求,正如您所说,您不希望“我不使用的东西甚至没有链接”,因此您将不得不进行大量手动黑客操作

如果您将所有外部依赖项编译成对象文件,您应该能够将它们链接到您自己的工具中(假设没有名称空间冲突;这是一个很大的假设,但如果您小心的话也不算太坏),如果您只需删除它们的
main()
函数,就应该能够做到这一点

事实上,对于依赖项,您甚至可以重命名它们的
main()
,并通过打包它们的argc/argv,让工具对您可用,就像您自己从命令行调用它一样,尽管这可能会有一些开销,而不是自己调用单个函数


前面提到的
busybox
已经提供了除
dpkg
之外的所有您需要的功能(甚至
tar
wget
),而且既然已经有了一个库,我想说您已经很好地实现了。

这些大部分都是bash中的外部依赖项。。。您想要一个包含所有这些可执行文件的库?为什么不直接调用
系统(“cp…”)
?(我假设您使用的是Linux,但在Windows中这是一个完全不同的问题…)为什么不能使用system()?所有这些都是外部可执行文件,所以使用“bash作为C库”并不能帮助您实现零依赖性。我可以接受这一点,但我宁愿不接受。请看我的编辑。我有点希望有人已经大致完成了您刚才描述的内容,然后将其打包为lib。