在这个领域我真的是新手…
我的问题是:如何在shell脚本(或bash,我不确定差异)中创建结构
例如,在C语言中,我们可以简单地:struct name
{
__u8 x;
__u8 y;
signed short z;
float t;
float u;
};
有可能在shell中创建类似的东西吗?
为什么?
我需要将一些值复制到/proc文件..但我需要确定它们是12字节,以及它们的顺序,因为我想将它们分配给linux内核模块内的先前结构
感谢您的解答或提示
我可以推荐一个更好的工具吗? Python?它安装在大多数Linux系统上,您可以使用它编写脚本,只需在顶部放置适当的shebang:
#! /usr/bin/python
或
#! /usr/bin/env python
然后使用struct模块将值打包成二进制表示。
#! /usr/bin/env python
import sys, struct
# Convert first 5 arguments
args = [f(arg) for f,arg in zip([int,int,int,float,float], sys.argv[1:])]
sys.stdout.write(struct.pack('BBhff',*args))
等价于
#! /usr/bin/env python
import sys, struct
x = int(sys.argv[1])
y = int(sys.argv[2])
z = int(sys.argv[3])
t = float(sys.argv[4])
u = float(sys.argv[5])
sys.stdout.write(struct.pack('BBhff',x,y,z,t,u))
和可以调用为:
./script.py 1 2 3 4.0 5.0 > /proc/somefile...
编辑:或者从另一个文件读取:
./script.py `cat args-file` > /proc/somefile...
您可以使用echo -en
在bash中输出原始字节,例如echo -en " 00 01"
将输出两个字节:0x00和0x01。因此,您只需要知道特定的字节,将它们编码为shell脚本中的八进制值,然后将它们echo -en
到proc文件中。我不认为你会有太多的运气试图将bash变量转换为四字节浮点数;如果您需要计算struct
的值,那么bash不是您的最佳选择。我敢打赌,这里有人能想出一个方法来做这件事,但这并不意味着这是正确的事情。
你们有Perl, Ruby, Python, PHP吗?它们都有一个pack
函数,用于将本地数字填充到字节流中,以匹配C struct
的布局。使用这些方法,您可以进行一些计算,将值pack
转换为12字节格式,然后将它们转储到proc文件中。
另一个选择是编写一个小的C程序:包括适当的头文件来获取模块的struct
,填充它,并将其fwrite
保存到您的proc文件中。这个选项将是我的第一选择,因为头应该照顾得到填充和其他不正确的