## Tcl9.0.3/Tk9.0.3 Documentation > Tcl Commands > unload

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    unload — 機械コードを取去る Unload machine code
  SYNOPSIS
  説明 DESCRIPTION
    -nocomplain
    -keeplibrary
    --
  取外し 操作 UNLOAD OPERATION
  取外し掛け金原型 UNLOAD HOOK PROTOTYPE
  註意 NOTES
  PORTABILITY ISSUES
    Unix
  瑕疵 BUGS
  用例 EXAMPLE
  SEE ALSO
  KEYWORDS

### NAME

unload — 機械コードを取去る Unload machine code

### SYNOPSIS

unload ?switches? fileName
unload ?switches? fileName prefix
unload ?switches? fileName prefix interp

### 説明 DESCRIPTION

この命令は､応用譜の番地領域から load 命令によって以前に組込まれた共有外部函数を取外そうとする｡ fileName は取外される外部函数を含むファイルの名前である; それは外部函数を組込む為に load に提供されたファイル名と同じでなければならない｡ prefix 引数は(その様に load に定められたか､渡された)前置辞であり､取外す手続函数の名前の算出に使われる; 提供されない場合､load と同じ方法で fileName から算出される｡この 解釈実行機能 引数 interp は其処から梱包が取外される解釈実行機能の経路名である(詳細は取扱説明書の interp の項を参照されたい)； interp が省略された時､省略時設定として､ unload 命令が起動された解釈実行機能になる｡ This command tries to unload shared libraries previously loaded with load from the application's address space. fileName is the name of the file containing the library file to be unload; it must be the same as the filename provided to load for loading the library. The prefix argument is the prefix (as determined by or passed to load), and is used to compute the name of the unload procedure; if not supplied, it is computed from fileName in the same manner as load. The interp argument is the path name of the interpreter from which to unload the package (see the interp manual entry for details); if interp is omitted, it defaults to the interpreter in which the unload command was invoked.

unload の最初の引数が - で始まる時は､それは切替子として扱われる｡現版では､次の切替子が使用できる: If the initial arguments to unload start with - then they are treated as switches. The following switches are currently supported:

-nocomplain
  全ての不都合伝達文を抑制する｡この切替子が与えらえると unload は不都合を全く報告しなくなる｡ 　 Suppresses all error messages. If this switch is given, unload will never report an error.

-keeplibrary
  手続函数から外部函数を取り外すシステム呼出しを発生する unload を抑制する｡ This switch will prevent unload from issuing the operating system call that will unload the library from the process.

--
  切替子の並びを終了させる｡これに､続く引数は､縦え - で始まっていても fileName として扱う｡ Marks the end of switches. The argument following this one will be treated as a fileName even if it starts with a -.

#### 取外し 操作 UNLOAD OPERATION

load 命令を通して共有外部函数を含むファイルが組み込まれると､Ｔｃｌは外部函数ファイルに二種類の勘定を設定する｡第一の勘定は通常の(信頼できる)解釈実行機能にその外部函数が組み込まれた回数､第二の勘定は安全解釈実行機能に外部函数が組み込まれた回数である｡共有外部函数を含むファイルは Tcl によって一度だけしか組み込まれない( load によるファイルの最初の呼出し)ので､これらの勘定の回数は､解釈実行機能が外部函数を利用した回数を計上している｡最初の load の呼出しに続く呼び出しは単純に該当する参照回数を増加している｡ When a file containing a shared library is loaded through the load command, Tcl associates two reference counts to the library file. The first counter shows how many times the library has been loaded into normal (trusted) interpreters while the second describes how many times the library has been loaded into safe interpreters. As a file containing a shared library can be loaded only once by Tcl (with the first load call on the file), these counters track how many interpreters use the library. Each subsequent call to load after the first simply increments the proper reference count.

unload は反対の方向に作動する｡最初の段階として､unload は外部函数が取外し可能か否かを調べる: 取外しできる外部函数は特別の取外し手順を送り込む｡取外し手続き函数は prefix と 対象の解釈実行機能が安全なものか否かにより定められる｡通常の解釈実行機能に対する初期化手順の名前は pfx_Unload の形式を有する､ここで pfx は prefix の最初の文字を大文字に､残りを小文字に変更したものに等しい｡譬えば､ prefix が foo 又は FOo であると､初期化手順の名前は Foo_Unload になる｡ もし､目的の解釈実行機能が安全な解釈実行機能の場合､初期化の手続き函数の名前はpkg_Unload ではなく pkg_SafeUnload になる｡ unload works in the opposite direction. As a first step, unload will check whether the library is unloadable: an unloadable library exports a special unload procedure. The name of the unload procedure is determined by prefix and whether or not the target interpreter is a safe one. For normal interpreters the name of the initialization procedure will have the form pfx_Unload, where pfx is the same as prefix except that the first letter is converted to upper case and all other letters are converted to lower case. For example, if prefix is foo or FOo, the initialization procedure's name will be Foo_Unload. If the target interpreter is a safe interpreter, then the name of the initialization procedure will be pkg_SafeUnload instead of pkg_Unload.

外部函数群は取外しできないと unload が定めると(又は､取外しできない機能を翻訳時に持たせていた)､エラーが戻る｡もし､外部函数群が取外し可能を検出すると､ unload は取外し手順を呼出す｡もし取外し手順が TCL_OK を戻すと､unload が進行し､当該勘定(対象解釈機能に依存する)が減らされる｡両方の勘定が零になったとき､その外部函数群はプロセスから外される｡ If unload determines that a library is not unloadable (or unload functionality has been disabled during compilation), an error will be returned. If the library is unloadable, then unload will call the unload procedure. If the unload procedure returns TCL_OK, unload will proceed and decrease the proper reference count (depending on the target interpreter type). When both reference counts have reached 0, the library will be detached from the process.

#### 取外し掛け金原型 UNLOAD HOOK PROTOTYPE

取外し手続函数は次の原型と合致しなければならない: The unload procedure must match the following prototype:

    typedef int Tcl_LibraryUnloadProc(
            Tcl_Interp *interp,
            int flags);

この 解釈実行機能 interp 引数はそこから外部函数が取外される解釈実行機能を識別する｡取外し手続函数は成功裏に遂行されたか否かを示す TCL_OK か TCL_ERROR を返さねばならない; 解釈実行機能の結果が不都合伝言文を指す様に設定すべきである｡この場合､この unload 命令の結果は､ unload 手続き函数により返された結果になる｡ The interp argument identifies the interpreter from which the library is to be unloaded. The unload procedure must return TCL_OK or TCL_ERROR to indicate whether or not it completed successfully; in the event of an error it should set the interpreter's result to point to an error message. In this case, the result of the unload command will be the result returned by the unload procedure.

flags 引数は TCL_UNLOAD_DETACH_FROM_INTERPRETER か TCL_UNLOAD_DETACH_FROM_PROCESS かでありうる｡取外し手続函数から戻った後も外部函数が手順に付いたまま残っていると(即ち､外部函数が別の解釈実行機能によって使用されているから)､TCL_UNLOAD_DETACH_FROM_INTERPRETER が定義される｡しかし､外部函数が目的の解釈実行機能のみに使用され､取外し手続函数が戻ると直に応用譜から取外される手筈になっていると､この flags 引数にはTCL_UNLOAD_DETACH_FROM_PROCESS が設定される｡ The flags argument can be either TCL_UNLOAD_DETACH_FROM_INTERPRETER or TCL_UNLOAD_DETACH_FROM_PROCESS. In case the library will remain attached to the process after the unload procedure returns (i.e. because the library is used by other interpreters), TCL_UNLOAD_DETACH_FROM_INTERPRETER will be defined. However, if the library is used only by the target interpreter and the library will be detached from the application as soon as the unload procedure returns, the flags argument will be set to TCL_UNLOAD_DETACH_FROM_PROCESS.

#### 註意 NOTES

unload 命令は､応用譜によって静的に連結されている外部函数は取り外しできない｡もし ファイル名 が空文字列の場合は prefix 引数が指定されねばならない｡ The unload command cannot unload libraries that are statically linked with the application. If fileName is an empty string, then the prefix argument must be specified.

もし prefix が省略されたり､空文字列が指定されると､Tcl は梱包の名前の推定を試みる｡その方法は､異なるOS毎に異なる様になされる｡大多数の UNIX で使われる省略時設定の推定法は､ fileName の最後の要素を使い､先頭の三文字が lib であれば､それを削除し､ 次の三文字がtcl9であれば､それを削除し､ それに続くどのローマ字も数字を除いて使用し､前置辞として先頭文字を大文字に変換される｡譬えば､命令 unload libxyz4.2.so は前置辞 Xyz を使い､命令 unload bin/last.so {} は前置辞 Last を使う｡[訳註:tcl9は四文字??] If prefix is omitted or specified as an empty string, Tcl tries to guess the prefix. This may be done differently on different platforms. The default guess, which is used on most UNIX platforms, is to take the last element of fileName, strip off the first three characters if they are lib, then strip off the next three characters if they are tcl9, and use any following wordchars but not digits, converted to titlecase as the prefix. For example, the command unload libxyz4.2.so uses the prefix Xyz and the command unload bin/last.so {} uses the prefix Last.

### PORTABILITY ISSUES

Unix
  全ての unixシステムが外部函数の取外しに対応している訳ではない｡このようなOSの基では unload は不都合を返す(-nocomplain が設定されてない限り)｡ Not all unix operating systems support library unloading. Under such an operating system unload returns an error (unless -nocomplain has been specified).

### 瑕疵 BUGS

もし､同じファイルが､異なる fileName で組込まれると､手続函数の番地空間に複数回組み込まれる｡この振舞はOS毎に異なる(あるOSでは過剰の組み込みを検知し､別のOSではそうならない)｡外部函数が何の情報も出さずにOSによって取外されると(その結果としてTclは外部函数が組込まれたままであると誤認する)､その様な外部函数に unload を使用すると危険があり得る(ある解釈実行機能が使用を続けている間に､応用譜から完全にその外部函数が引抜かれる事態が起る)｡ If the same file is loaded by different fileNames, it will be loaded into the process's address space multiple times. The behavior of this varies from system to system (some systems may detect the redundant loads, others may not). In case a library has been silently detached by the operating system (and as a result Tcl thinks the library is still loaded), it may be dangerous to use unload on such a library (as the library will be completely detached from the application while some interpreters will continue to use it).

### 用例 EXAMPLE

もし､ファイル foobar.dll 中の取外しできない機能単位が次の様に load 命令を使って組込まれている場合(Windows上): If an unloadable module in the file foobar.dll had been loaded using the load command like this (on Windows):

    load c:/some/dir/foobar.dll

この様に取外せるかもしれない: then it would be unloaded like this:

    unload c:/some/dir/foobar.dll

これにより､長期実行の Tcl 算譜に一時的にC言語の機能単位を導入し､全体の Tcl の進行を遮断停止することなく､元通りに取り除く(最早使う必要がなくなるとか､新しい版に更新されるとかの理由で)ことが出来るようになる｡ This allows a C code module to be installed temporarily into a long-running Tcl program and then removed again (either because it is no longer needed or because it is being updated with a new version) without having to shut down the overall Tcl process.

### SEE ALSO

info sharedlibextension, load, safe

### KEYWORDS

binary code, unloading, safe interpreter, shared library
Copyright © 2003 George Petasis <petasis(at)iit.demokritos.gr>.