DBモジュールを使ってちょっとしたDBを作ってるんですが、容量制限
らしきものでひっかかってます。そう、1024byteの壁です。これを越えると
sdbm store returned -1, errno 22, key "0012018" at ./hoehoe.pl line ~.
と叱られてしまうのです。

他にもODBMはもちろんのこと、NDBMも試しましたが結果は同じです。
容量制限のない GDBM、DB_Fileは大丈夫でした。
しかし SDBM、NDBMは 4096byteまで大丈夫だったはず。なにか別の方法が
あるのでしょうか?

今回の試しに以下のものを書いてみました。「3000」を「1000」くらいに
すると通ります。DB_File、GDBMでは「3000」でも大丈夫です。

----------------------------------------
use Config;
use Fcntl;
use SDBM_File;

$flags = O_CREAT|O_RDWR|&BINARY;
tie( %HOE, 'SDBM_File', 'hoe', $flags, 0666 ) || die "Can't open DB";
$uiui .= 'UIUI' while( 3000 > length( $uiui ));
$HOE{'key'} = $uiui;
untie( %HOE );
print "ok\n";
exit;

sub BINARY{
return O_BINARY if( $Config{osname} =~ /^(MS)?Win/ );
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ああ、SDBMだけじゃなくてNDBMにも制限が1kだけど?という質問


だったんですね。失礼しました。

私の使ってるOSはNDBMをGDBMでエミュレーションしてしまうので、
制限無しでした。

http://www.wwnet.net/~janc/incnote/dbm.html などのNDBMの項を見ると

> However, there is still a limit on the total size of the key/content pairs that can be stored
(this ranges from 1018 bytes to 4096 bytes).

とあるのでこれによると必ずしも4Kと限っているわけじゃなさそうです。
お使いのOSの環境にもよるんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

なるほど、環境もしくは設定によって違ってくるのかもしれませんね。
もうちょっと調べてみたいと思います。ありがとうございました。

お礼日時:2001/05/14 03:27

perldoc AnyDBM_Fileでも、5.6.0で配布されているソース見ても、


制限は1024でしたよ。4096はdirの方ではないですか。

この回答への補足

http://www.din.or.jp/~abe/Perl5Man/AnyDBMFile.3p …
これによるとSDBMにはデフォルト「1k」で再定義可能
のようですね。といってもプロバイダなのでroot権限もって
ないからどうしようもないのですが。^^;

しかしNDBMは「4k」とあるのですが、これは1レコードのサイズ
とは違うのでしょうか? NDBMでもうまくいかないのです。

補足日時:2001/05/12 22:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング