技术解析

类似 busybox,不同的软链,执行结果不同,是怎样实现的?
0
2021-06-21 08:01:27
idczone

如题,在 busybox 中,busybox 命令会被软链到 ls,又被软链到 wc,但是在执行软链 ls 和 wc 的时候,输出(命令的作用)又是不同的,请教一下大佬们,这个咋实现的?

想在 google 里面搜索的,但是不知道咋表达,也没找到有用的信息。


bash
if [ "$(basename $0)" = 'wc' ] then

看 busybox 的代码就知道了
我猜 busybox 的代码里判断软连的文件名然后执行不同的代码

原来像这样直接写死的啊,谢谢

谢谢

不管是 windows 还是 linux 你命令执行程序的时候, 第一个系统参数 是 你调用的命令的名字。
应该是通过这个实现的。

busybox 不是软连接吧, 每个程序都是 busybox, 只是名称不同, 默认参数不同.


linux 分区,谢谢茄子

嗯,我还以为是写好程序之后,可以动态指定哪个软链执行哪个程序呢,原来是手工写死在程序里的

软链过去之后,名称不同,但是都没有参数


参考 https://busybox.net/FAQ.html/>https://github.com/antonyantony/busybox/blob/master/libbb/appletlib.c/>这里定义了所有的功能
https://github.com/antonyantony/busybox/blob/master/include/applets.h
这里是各种功能的实现,所以 busybox 和 gnu 的工具的参数是有较大差异的
https://github.com/antonyantony/busybox/tree/master/coreutils
https://github.com/antonyantony/busybox/tree/master/findutils
https://github.com/antonyantony/busybox/tree/master/modutils
https://github.com/antonyantony/busybox/tree/master/miscutils

我还想一会有空的时候再去看源码呢,多谢~

PS:
iptables ip6tables 也是这样的,实际上是链接到了 xtables-multi

os.Args [ 0 ]

argv[0]

判断命令行第一个参数就是了,好多语言都支持。

学 C 的时候书上没说 argv[0] 是干啥的吗……建议把那本书撕了……

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服