0

一部のハードウェアとインターフェイスする、簡素化されたリアルタイム Linux ボックスがあります。

構成ファイルは *.dbm ファイルであり、アクセスできません。それらはある種のキー値データベースのように見えますが、私が試したすべてのライブラリは空になりました。

Perl、Python、Ruby の DBM 読み取りライブラリを試してみましたが、うまくいきませんでした。これらのファイルに関するガイダンスは素晴らしいものです。私は以前にそれらを見たことがありません。

これは、1 つのファイルを除外するとどうなるかです。

 DBMFILE  Aug 31 2004,�
,jy                    �
�~���"��+�K&��gB��7JJ�
                                         ,��GLOBA.PB_COMBI�SMSI���
JG]
,��BUS_DP
PC  �
            '

xLokalT
          J��
                ,��SL_DP
                             PC!�
                                    ��
#,��PLC_PARAMJPf,��PROJEKT�PROFIBUS new network1.00022.02.2012J,��KBL_HEADER:�JJp,��KBLJ��,��ALI-SETUPB ����
������������������JJ,,��OBJ-DEFJJ��,��ALI_CLIENTTJJ�
,��ALI_SERVERJ      J\r�����2,  ��      ST_OV_00Boolean0Integer8    0Integer16
0Integer32
            0Unsigned8
0Unsigned32Floating-Point0igned16
Octet String Jo� ,��DESCRIPT �ABB OyABB Drives RPBA-01ABBSlave1***reserved***�
                                                                                      �
                                                                                      %  

だから私がすでに試したことを示すために、空のオブジェクト(キー値なし)のみを考え出します*編集

パール -

#!/usr/bin/perl -w                                                                                                                                                                                                                             

use strict;

use DB_File;
use GDBM_File;

my ($filename, %hash, $flags, $mode, $DB_HASH) = @ARGV;

tie %hash,  'DB_File', [$filename, $flags, $mode, $DB_HASH]
  or die "Cannot open $filename: $!\n";

while ( my($key, $value) = each %hash ) {
   print "$key = $value\n";
}

 # these unties happen automatically at program exit                                                                                                                                                                                            
untie %hash;

何も返さない

パイソン -

db = dbm.open('file', 'c')

ルビー -

db = DBM.open('file', 666, DBM::CREATRW)

これらのすべてが空に戻りました。同じ低レベルのライブラリを使用していると思います。いくつかの異なるバージョンがあるように見えるので、DBM ファイルのいくつかの履歴/コンテキストは素晴らしいでしょう。

**編集

その上でファイルを実行すると戻ります

$ file abb12mb_uncontrolledsynch_ppo2_1slave.dbm 
abb12mb_uncontrolledsynch_ppo2_1slave.dbm: data

および実行中の文字列出力

$ strings abb12mb_uncontrolledsynch_ppo2_1slave.dbm 
DBMFILE  
Aug 31 2004
GLOBAL
PB_COMBI
SMSI
BUS_DP
Lokal
SL_DP
PLC_PARAM
PROJEKT
PROFIBUS new network
1 .000
22.02.2012
KBL_HEADER
ALI-SETUP
OBJ-DEF
ALI_CLIENT
ALI_SERVER
ST_OV_0
Boolean
Integer8
Integer16
Integer32
Unsigned8
Unsigned16
Unsigned32
Floating-Point
Octet String
DESCRIPT
ABB Oy
ABB Drives RPBA-01
ABBSlave1
***reserved***
4

2 に答える 2

0

Perl の dbmopen 関数のドキュメントから:

[この関数は、tie 関数に大きく取って代わられました。]

おそらくDB_Filetieで試してみたいと思うでしょう。

 use DB_File;
 tie %hash,  'DB_File', $filename, $flags, $mode, $DB_HASH;

次に、データは にあり%hashます。

fileファイルに対して実行して、それが実際に何であるかを確認することも興味深いかもしれません。

于 2015-01-15T15:39:53.057 に答える