bionic (3) load.3tcl.gz

Provided by: manpages-zh_1.6.3.2-1_all bug

NAME

       load - 裝載機器代碼並初始化新命令。

總覽 SYNOPSIS

       load fileName
       load fileName packageName
       load fileName packageName interp
_________________________________________________________________

描述 DESCRIPTION

       這個命令把二進制代碼從一個文件裝載到應用的地址空間中並調用在包(package)中的初始化過程來把它加入到解釋器
       中。fileName         是包含代碼的文件的名字;它準確的形式在不同的系統上是不同的,但在多數系統上是一個共享
       庫,例如,在 Solaris  下的 .so  文件或在 Windows 下的一個 DLL。packageName   是包的名字,並被用於計算初始
       化過程的名字。interp   是要在其中裝載包的解釋器的路徑名(詳情參見  interp    手冊條目);如果省略了  interp
       ,它的缺省是在其中調用  load 命令的那個解釋器。

       一旦已經被裝載到應用的地址空間中,兩個初始化過程之一將在新代碼中被調用。典型的,初始化進程將向一個    Tcl
       解釋器添加新命令。初始化過程的名字由    packageName    和目標解釋器是否是安全解釋器來確定。對於通常的解釋
       器,初始化過程的名字的形式是 pkg_Init,這裏 pkgpackageName   相同,但是第一個字母被轉換成大寫而所
       有其他字母被轉換成小寫。例如,如果 packageNamefooFOo,則初始化過程的名字將是 Foo_Init。

       如果目標解釋器是一個安全解釋器,則初始化過程的名字將是 pkg_SafeInit     而不是 pkg_Init。寫  pkg_SafeInit
       函數要仔細,在包中提供的功能中,只用由不可信任的代碼使用是安全的的那部分初始化安全解釋器。  關於 Safe-Tcl
       的詳細的信息,請參見 safe  手冊條目。

       初始化過程必須匹配下列原型 (prototype):
              typedef int Tcl_PackageInitProc(Tcl_Interp *interp);
       interp 參數標識在其中裝載包的解釋器。初始化過程必須返回    TCL_OKTCL_ERROR   來指示是否成功完成;在有
       錯誤的情況下,應把解釋器的結果設置爲指向一個錯誤消息。初始化過程返回的結果就是  load  命令的結果。

       在一個應用中對每個  fileName 只進行一次文件的實際裝載。如果一個給定的 fileName   被裝載到多個解釋器中,則
       第一個 load   將裝載代碼並調用初始化過程;隨後的 load  將調用初始化過程而不再次裝載代碼  。不可能卸載或重
       載一個包。

       load     命令還支持同應用靜態連接的包,條件是這些包已經通過調用   Tcl_StaticPackage    過程註冊過了。如果
       fileName  是一個空串,則必須指定packageName   。

       如果省略了 packageName   或被指定爲一個空串,Tcl   嘗試着猜出包的名字。在不同的平臺上可能是不同的。在多數
       UNIX   平臺上,缺省的猜測是接受 fileName  的最後的組成部分,如果前三個字符是 lib 就去掉它們,使用所有隨後
       的 字母和下劃線作爲模塊的名字。 例如,命令 load libxyz4.2.so   使用模塊名 xyz  而命令 load bin/last.so {} │
       使用模塊名 last。

       如果  fileName   是一個空串,則必須指定 packageNameload   命令首先用這個名字查找一個靜態裝載包(通過調用 │
       Tcl_StaticPackage    過程註冊的包);如果找到了就使用它。否則,load   命令用這個名字查找動態裝載包,如果找 │
       到就使用它。如果一些不同的文件被裝載成包的不同版本,Tcl  選擇被最先裝載的文件。

移植要點 PORTABILITY ISSUES

       Windows
              在裝載出現  "library  not  found" 錯誤的時候,也有可能是沒找到一個依賴庫。要查看依賴庫,在一個 DOS
              控制檯中“dumpbin   -imports   <dllname>”來查看必須導入那些庫。在當前目錄中裝載一個    DLL     的時
              候,Windows 將忽略作爲一個路徑指定符(specifier)的“./”,轉而使用一次啓發式(heuristic)的查找來找到這
              個 DLL。要避免如此,裝載DLL  就要用
                  load [file join [pwd] mylib.DLL]

BUGS

       如果以不同的fileNames    裝載同一個文件,它將被多次載入這個進程的地址空間。在不同的系統上裝載的行爲是不同
       的(一些系統可以檢測多餘的裝載,其他的可能不能)。

參見 SEE ALSO

       info sharedlibextension, Tcl_StaticPackage(3), safe(n)

關鍵字 KEYWORDS

       binary code, loading, safe interpreter, shared library

[中文版維護人]

       寒蟬退士

[中文版最新更新]

       2001/08/30

《中國 Linux 論壇 man 手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh