在shell脚本中创建结构(数据结构)



在这个领域我真的是新手…

我的问题是:如何在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 "0001"将输出两个字节:0x00和0x01。因此,您只需要知道特定的字节,将它们编码为shell脚本中的八进制值,然后将它们echo -en到proc文件中。我不认为你会有太多的运气试图将bash变量转换为四字节浮点数;如果您需要计算struct的值,那么bash不是您的最佳选择。我敢打赌,这里有人能想出一个方法来做这件事,但这并不意味着这是正确的事情。

你们有Perl, Ruby, Python, PHP吗?它们都有一个pack函数,用于将本地数字填充到字节流中,以匹配C struct的布局。使用这些方法,您可以进行一些计算,将值pack转换为12字节格式,然后将它们转储到proc文件中。

另一个选择是编写一个小的C程序:包括适当的头文件来获取模块的struct,填充它,并将其fwrite保存到您的proc文件中。这个选项将是我的第一选择,因为头应该照顾得到填充和其他不正确的

最新更新