內容

名稱

NDBM_File - 與 ndbm 檔案的繫結存取

概要

use Fcntl;   # For O_RDWR, O_CREAT, etc.
use NDBM_File;

tie(%h, 'NDBM_File', 'filename', O_RDWR|O_CREAT, 0666)
  or die "Couldn't tie NDBM file 'filename': $!; aborting";

# Now read and change the hash
$h{newkey} = newvalue;
print $h{oldkey};
...

untie %h;

說明

NDBM_File 在 Perl hash 變數與 NDBM_File 格式的檔案之間建立連線。您可以操作檔案中的資料,就像在 Perl hash 中一樣,但是當您的程式結束時,資料會保留在檔案中,供下次程式執行時使用。

使用 Perl 內建的 tie 函式搭配 NDBM_File,以在變數與檔案之間建立連線。tie 的參數應為

  1. 您要繫結的 hash 變數。

  2. 字串 "NDBM_File"。(這會告訴 Perl 使用 NDBM_File 套件來執行 hash 的函式。)

  3. 您要繫結到 hash 的檔案名稱。

  4. 旗標。使用下列其中一個

    O_RDONLY

    檔案中資料的唯讀存取權。

    O_WRONLY

    檔案中資料的唯寫存取權。

    O_RDWR

    讀寫存取權。

    如果您想要在檔案不存在時建立檔案,請將 O_CREAT 新增到任何一個,如範例所示。如果您省略 O_CREAT 且檔案尚未存在,則 tie 呼叫將會失敗。

  5. 建立新檔案時要使用的預設權限。實際權限將會受到使用者的 umask 修改,因此您在此處可能應該使用 0666。(請參閱 perlfunc 中的「umask」。)

診斷

發生錯誤時,tie 呼叫會傳回未定義值,並可能設定 $! 以包含無法繫結檔案的原因。

ndbm store returned -1, errno 22, key "..." at ...

當您嘗試儲存過長的鍵或值時,將會發出此警告。這表示變更未記錄在資料庫中。請參閱下方的錯誤和警告。

安全性與可攜性

請勿接受來自不受信任來源的 NDBM 檔案。

在現代的 Linux 系統中,這些通常是 GDBM 檔案,而這些檔案無法跨平台使用。

GDBM 文件並未表示來自不受信任來源的檔案可以安全地與 libgdbm 一起使用。

未對 ndbm 支援使用 GDBM 相容性的系統將會使用特定於平台的函式庫,可能繼承自 BSD 系統,在該系統中使用不受信任的檔案可能安全,也可能不安全。

惡意製作的檔案可能會導致 perl 崩潰,甚至暴露安全性漏洞。

錯誤和警告

您可以儲存在 NDBM 檔案中的資料大小有許多限制。最重要的限制是鍵的長度加上其關聯值的長度不得超過 1008 個位元組。

請參閱 perlfunc 中的「tie」perldbmfilterFcntl