## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > FileSystem

### 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
    Tcl_FSRegister, Tcl_FSUnregister, Tcl_FSData, Tcl_FSMountsChanged, Tcl_FSGetFileSystemForPath, Tcl_FSGetPathType, Tcl_FSCopyFile, Tcl_FSCopyDirectory, Tcl_FSCreateDirectory, Tcl_FSDeleteFile, Tcl_FSRemoveDirectory, Tcl_FSRenameFile, Tcl_FSListVolumes, Tcl_FSEvalFile, Tcl_FSEvalFileEx, Tcl_FSLoadFile, Tcl_FSUnloadFile, Tcl_FSMatchInDirectory, Tcl_FSLink, Tcl_FSLstat, Tcl_FSUtime, Tcl_FSFileAttrsGet, Tcl_FSFileAttrsSet, Tcl_FSFileAttrStrings, Tcl_FSStat, Tcl_FSAccess, Tcl_FSOpenFileChannel, Tcl_FSGetCwd, Tcl_FSChdir, Tcl_FSPathSeparator, Tcl_FSJoinPath, Tcl_FSSplitPath, Tcl_FSEqualPaths, Tcl_FSGetNormalizedPath, Tcl_FSJoinToPath, Tcl_FSConvertToPathType, Tcl_FSGetInternalRep, Tcl_FSGetTranslatedPath, Tcl_FSGetTranslatedStringPath, Tcl_FSNewNativePath, Tcl_FSGetNativePath, Tcl_FSFileSystemInfo, Tcl_GetAccessTimeFromStat, Tcl_GetBlockSizeFromStat, Tcl_GetBlocksFromStat, Tcl_GetChangeTimeFromStat, Tcl_GetDeviceTypeFromStat, Tcl_GetFSDeviceFromStat, Tcl_GetFSInodeFromStat, Tcl_GetGroupIdFromStat, Tcl_GetLinkCountFromStat, Tcl_GetModeFromStat, Tcl_GetModificationTimeFromStat, Tcl_GetSizeFromStat, Tcl_GetUserIdFromStat, Tcl_AllocStatBuf — どのようなファイル系とも対話する為の手続函数 procedures to interact with any filesystem
  SYNOPSIS
    #include <tcl.h>
    int
    Tcl_FSRegister(clientData, fsPtr)
    int
    Tcl_FSUnregister(fsPtr)
    void *
    Tcl_FSData(fsPtr)
    Tcl_FSMountsChanged(fsPtr)
    const Tcl_Filesystem *
    Tcl_FSGetFileSystemForPath(pathPtr)
    Tcl_PathType
    Tcl_FSGetPathType(pathPtr)
    int
    Tcl_FSCopyFile(srcPathPtr, destPathPtr)
    int
    Tcl_FSCopyDirectory(srcPathPtr, destPathPtr, errorPtr)
    int
    Tcl_FSCreateDirectory(pathPtr)
    int
    Tcl_FSDeleteFile(pathPtr)
    int
    Tcl_FSRemoveDirectory(pathPtr, recursive, errorPtr)
    int
    Tcl_FSRenameFile(srcPathPtr, destPathPtr)
    Tcl_Obj *
    Tcl_FSListVolumes(void)
    int
    Tcl_FSEvalFileEx(interp, pathPtr, encodingName)
    int
    Tcl_FSEvalFile(interp, pathPtr)
    int
    Tcl_FSLoadFile(interp, pathPtr, sym1, sym2, proc1Ptr, proc2Ptr,
    loadHandlePtr, unloadProcPtr)
    int
    Tcl_FSUnloadFile(interp, loadHandle)
    int
    Tcl_FSMatchInDirectory(interp, resultPtr, pathPtr, pattern, types)
    Tcl_Obj *
    Tcl_FSLink(linkNamePtr, toPtr, linkAction)
    int
    Tcl_FSLstat(pathPtr, statPtr)
    int
    Tcl_FSUtime(pathPtr, tval)
    int
    Tcl_FSFileAttrsGet(interp, index, pathPtr, objPtrRef)
    int
    Tcl_FSFileAttrsSet(interp, index, pathPtr, objPtr)
    const char *const *
    Tcl_FSFileAttrStrings(pathPtr, objPtrRef)
    int
    Tcl_FSStat(pathPtr, statPtr)
    int
    Tcl_FSAccess(pathPtr, mode)
    Tcl_Channel
    Tcl_FSOpenFileChannel(interp, pathPtr, modeString, permissions)
    Tcl_Obj *
    Tcl_FSGetCwd(interp)
    int
    Tcl_FSChdir(pathPtr)
    Tcl_Obj *
    Tcl_FSPathSeparator(pathPtr)
    Tcl_Obj *
    Tcl_FSJoinPath(listObj, elements)
    Tcl_Obj *
    Tcl_FSSplitPath(pathPtr, lenPtr)
    int
    Tcl_FSEqualPaths(firstPtr, secondPtr)
    Tcl_Obj *
    Tcl_FSGetNormalizedPath(interp, pathPtr)
    Tcl_Obj *
    Tcl_FSJoinToPath(basePtr, objc, objv)
    int
    Tcl_FSConvertToPathType(interp, pathPtr)
    void *
    Tcl_FSGetInternalRep(pathPtr, fsPtr)
    Tcl_Obj *
    Tcl_FSGetTranslatedPath(interp, pathPtr)
    const char *
    Tcl_FSGetTranslatedStringPath(interp, pathPtr)
    Tcl_Obj *
    Tcl_FSNewNativePath(fsPtr, clientData)
    const void *
    Tcl_FSGetNativePath(pathPtr)
    Tcl_Obj *
    Tcl_FSFileSystemInfo(pathPtr)
    Tcl_StatBuf *
    Tcl_AllocStatBuf()
    Tcl_WideInt
    Tcl_GetAccessTimeFromStat(statPtr)
    unsigned
    Tcl_GetBlockSizeFromStat(statPtr)
    Tcl_WideUInt
    Tcl_GetBlocksFromStat(statPtr)
    Tcl_WideInt
    Tcl_GetChangeTimeFromStat(statPtr)
    int
    Tcl_GetDeviceTypeFromStat(statPtr)
    unsigned
    Tcl_GetFSDeviceFromStat(statPtr)
    unsigned
    Tcl_GetFSInodeFromStat(statPtr)
    int
    Tcl_GetGroupIdFromStat(statPtr)
    int
    Tcl_GetLinkCountFromStat(statPtr)
    unsigned
    Tcl_GetModeFromStat(statPtr)
    Tcl_WideInt
    Tcl_GetModificationTimeFromStat(statPtr)
    Tcl_WideUInt
    Tcl_GetSizeFromStat(statPtr)
    int
    Tcl_GetUserIdFromStat(statPtr)
  引数 ARGUMENTS
    const Tcl_Filesystem *fsPtr (入力in)
    Tcl_Obj *pathPtr (入力in)
    Tcl_Obj *srcPathPtr (入力in)
    Tcl_Obj *destPathPtr (入力in)
    int recursive (入力in)
    const char *encodingName (入力in)
    const char *pattern (入力in)
    Tcl_GlobTypeData *types (入力in)
    Tcl_Interp *interp (入力in)
    void *clientData (入力in)
    Tcl_Obj *firstPtr (入力in)
    Tcl_Obj *secondPtr (入力in)
    Tcl_Obj *listObj (入力in)
    int elements (入力in)
    Tcl_Obj **errorPtr (出力out)
    int index (入力in)
    Tcl_Obj *objPtr (入力in)
    Tcl_Obj **objPtrRef (出力out)
    Tcl_Obj *resultPtr (出力out)
    int mode (入力in)
    Tcl_StatBuf *statPtr (出力out)
    const char *sym1 (入力in)
    const char *sym2 (入力in)
    Tcl_PackageInitProc **proc1Ptr (出力out)
    Tcl_PackageInitProc **proc2Ptr (出力out)
    void **clientDataPtr (出力out)
    Tcl_LoadHandle *loadHandlePtr (出力out)
    Tcl_FSUnloadFileProc **unloadProcPtr (出力out)
    Tcl_LoadHandle loadHandle (入力in)
    utimbuf *tval (入力in)
    const char *modeString (入力in)
    int permissions (入力in)
    int *lenPtr (出力out)
    Tcl_Obj *basePtr (入力in)
    int objc (入力in)
    Tcl_Obj *const objv[] (入力in)
    Tcl_Obj *linkNamePtr (入力in)
    Tcl_Obj *toPtr (入力in)
    int linkAction (入力in)
  説明 DESCRIPTION
  FS API FUNCTIONS
  PORTABLE STAT RESULT API
  THE VIRTUAL FILESYSTEM API
  THE TCL_FILESYSTEM STRUCTURE
  EXAMPLE FILESYSTEM DEFINITION
  FILESYSTEM INFRASTRUCTURE
  TYPENAME
  STRUCTURE LENGTH
  VERSION
  PATHINFILESYSTEMPROC
  DUPINTERNALREPPROC
  FREEINTERNALREPPROC
  INTERNALTONORMALIZEDPROC
  CREATEINTERNALREPPROC
  NORMALIZEPATHPROC
  FILESYSTEM OPERATIONS
  FILESYSTEMPATHTYPEPROC
  FILESYSTEMSEPARATORPROC
  STATPROC
  ACCESSPROC
  OPENFILECHANNELPROC
  MATCHINDIRECTORYPROC
  UTIMEPROC
  LINKPROC
  LISTVOLUMESPROC
  FILEATTRSTRINGSPROC
  FILEATTRSGETPROC
  FILEATTRSSETPROC
  CREATEDIRECTORYPROC
  REMOVEDIRECTORYPROC
  DELETEFILEPROC
  FILESYSTEM EFFICIENCY
  LSTATPROC
  COPYFILEPROC
  RENAMEFILEPROC
  COPYDIRECTORYPROC
  LOADFILEPROC
  UNLOADFILEPROC
  GETCWDPROC
  CHDIRPROC
  SEE ALSO
  KEYWORDS

### NAME

Tcl_FSRegister, Tcl_FSUnregister, Tcl_FSData, Tcl_FSMountsChanged, Tcl_FSGetFileSystemForPath, Tcl_FSGetPathType, Tcl_FSCopyFile, Tcl_FSCopyDirectory, Tcl_FSCreateDirectory, Tcl_FSDeleteFile, Tcl_FSRemoveDirectory, Tcl_FSRenameFile, Tcl_FSListVolumes, Tcl_FSEvalFile, Tcl_FSEvalFileEx, Tcl_FSLoadFile, Tcl_FSUnloadFile, Tcl_FSMatchInDirectory, Tcl_FSLink, Tcl_FSLstat, Tcl_FSUtime, Tcl_FSFileAttrsGet, Tcl_FSFileAttrsSet, Tcl_FSFileAttrStrings, Tcl_FSStat, Tcl_FSAccess, Tcl_FSOpenFileChannel, Tcl_FSGetCwd, Tcl_FSChdir, Tcl_FSPathSeparator, Tcl_FSJoinPath, Tcl_FSSplitPath, Tcl_FSEqualPaths, Tcl_FSGetNormalizedPath, Tcl_FSJoinToPath, Tcl_FSConvertToPathType, Tcl_FSGetInternalRep, Tcl_FSGetTranslatedPath, Tcl_FSGetTranslatedStringPath, Tcl_FSNewNativePath, Tcl_FSGetNativePath, Tcl_FSFileSystemInfo, Tcl_GetAccessTimeFromStat, Tcl_GetBlockSizeFromStat, Tcl_GetBlocksFromStat, Tcl_GetChangeTimeFromStat, Tcl_GetDeviceTypeFromStat, Tcl_GetFSDeviceFromStat, Tcl_GetFSInodeFromStat, Tcl_GetGroupIdFromStat, Tcl_GetLinkCountFromStat, Tcl_GetModeFromStat, Tcl_GetModificationTimeFromStat, Tcl_GetSizeFromStat, Tcl_GetUserIdFromStat, Tcl_AllocStatBuf — どのようなファイル系とも対話する為の手続函数 procedures to interact with any filesystem

### SYNOPSIS

#include <tcl.h>
int
Tcl_FSRegister(clientData, fsPtr)
int
Tcl_FSUnregister(fsPtr)
void *
Tcl_FSData(fsPtr)
Tcl_FSMountsChanged(fsPtr)
const Tcl_Filesystem *
Tcl_FSGetFileSystemForPath(pathPtr)
Tcl_PathType
Tcl_FSGetPathType(pathPtr)
int
Tcl_FSCopyFile(srcPathPtr, destPathPtr)
int
Tcl_FSCopyDirectory(srcPathPtr, destPathPtr, errorPtr)
int
Tcl_FSCreateDirectory(pathPtr)
int
Tcl_FSDeleteFile(pathPtr)
int
Tcl_FSRemoveDirectory(pathPtr, recursive, errorPtr)
int
Tcl_FSRenameFile(srcPathPtr, destPathPtr)
Tcl_Obj *
Tcl_FSListVolumes(void)
int
Tcl_FSEvalFileEx(interp, pathPtr, encodingName)
int
Tcl_FSEvalFile(interp, pathPtr)
int
Tcl_FSLoadFile(interp, pathPtr, sym1, sym2, proc1Ptr, proc2Ptr,
`` loadHandlePtr, unloadProcPtr)
int
Tcl_FSUnloadFile(interp, loadHandle)
int
Tcl_FSMatchInDirectory(interp, resultPtr, pathPtr, pattern, types)
Tcl_Obj *
Tcl_FSLink(linkNamePtr, toPtr, linkAction)
int
Tcl_FSLstat(pathPtr, statPtr)
int
Tcl_FSUtime(pathPtr, tval)
int
Tcl_FSFileAttrsGet(interp, index, pathPtr, objPtrRef)
int
Tcl_FSFileAttrsSet(interp, index, pathPtr, objPtr)
const char *const *
Tcl_FSFileAttrStrings(pathPtr, objPtrRef)
int
Tcl_FSStat(pathPtr, statPtr)
int
Tcl_FSAccess(pathPtr, mode)
Tcl_Channel
Tcl_FSOpenFileChannel(interp, pathPtr, modeString, permissions)
Tcl_Obj *
Tcl_FSGetCwd(interp)
int
Tcl_FSChdir(pathPtr)
Tcl_Obj *
Tcl_FSPathSeparator(pathPtr)
Tcl_Obj *
Tcl_FSJoinPath(listObj, elements)
Tcl_Obj *
Tcl_FSSplitPath(pathPtr, lenPtr)
int
Tcl_FSEqualPaths(firstPtr, secondPtr)
Tcl_Obj *
Tcl_FSGetNormalizedPath(interp, pathPtr)
Tcl_Obj *
Tcl_FSJoinToPath(basePtr, objc, objv)
int
Tcl_FSConvertToPathType(interp, pathPtr)
void *
Tcl_FSGetInternalRep(pathPtr, fsPtr)
Tcl_Obj *
Tcl_FSGetTranslatedPath(interp, pathPtr)
const char *
Tcl_FSGetTranslatedStringPath(interp, pathPtr)
Tcl_Obj *
Tcl_FSNewNativePath(fsPtr, clientData)
const void *
Tcl_FSGetNativePath(pathPtr)
Tcl_Obj *
Tcl_FSFileSystemInfo(pathPtr)
Tcl_StatBuf *
Tcl_AllocStatBuf()
Tcl_WideInt
Tcl_GetAccessTimeFromStat(statPtr)
unsigned
Tcl_GetBlockSizeFromStat(statPtr)
Tcl_WideUInt
Tcl_GetBlocksFromStat(statPtr)
Tcl_WideInt
Tcl_GetChangeTimeFromStat(statPtr)
int
Tcl_GetDeviceTypeFromStat(statPtr)
unsigned
Tcl_GetFSDeviceFromStat(statPtr)
unsigned
Tcl_GetFSInodeFromStat(statPtr)
int
Tcl_GetGroupIdFromStat(statPtr)
int
Tcl_GetLinkCountFromStat(statPtr)
unsigned
Tcl_GetModeFromStat(statPtr)
Tcl_WideInt
Tcl_GetModificationTimeFromStat(statPtr)
Tcl_WideUInt
Tcl_GetSizeFromStat(statPtr)
int
Tcl_GetUserIdFromStat(statPtr)

### 引数 ARGUMENTS

const Tcl_Filesystem *fsPtr (入力in)
  種々のファイル系操作を遂行する為に呼出すことができる手続函数の番地を含む構造を指す｡　 　　 Points to a structure containing the addresses of procedures that can be called to perform the various filesystem operations.

Tcl_Obj *pathPtr (入力in)
  この値による経路表現は疑問の操作のために使用される｡もし値が既に内部経路表現を有していない場合､それを有すように変換される｡　 　 The path represented by this value is used for the operation in question. If the value does not already have an internal path representation, it will be converted to have one.

Tcl_Obj *srcPathPtr (入力in)
  pathPtr 用ではなく､複写又は改名操作のため､源資ファイル名のために使用される｡　 As for pathPtr, but used for the source file for a copy or rename operation.

Tcl_Obj *destPathPtr (入力in)
  pathPtr 用ではなく､複写又は改名操作のため､配布先ファイル名のために使用される｡　 As for pathPtr, but used for the destination filename for a copy or rename operation.

int recursive (入力in)
  仔ディレクトリーとその中身を同様に除去すべきか否か｡ Whether to remove subdirectories and their contents as well.

const char *encodingName (入力in)
  pathPtr によって識別されるファイル内に保存され､評価されるデータの符号化｡ 　　 The encoding of the data stored in the file identified by pathPtr and to be evaluated.

const char *pattern (入力in)
  この文様に合致したファイルかディレクトリーのみが返される｡　 Only files or directories matching this pattern will be returned.

Tcl_GlobTypeData *types (入力in)
  この構造内の型記述に合致したファイルかディレクトリーのみが返される｡この假引数は NULL はでも好い｡　 Only files or directories matching the type descriptions contained in this structure will be returned. This parameter may be NULL.

Tcl_Interp *interp (入力in)
  結果､又は､評価､又は不都合伝言文の報告のどれかに使用する解釈実行機能｡　 Interpreter to use either for results, evaluation, or reporting error messages.

void *clientData (入力in)
  生成すべき経路値の生の記述譜｡　 The native description of the path value to create.

Tcl_Obj *firstPtr (入力in)
  比較すべき二つの経路値の一番目｡値は経路型に変換される｡　 The first of two path values to compare. The value may be converted to path type.

Tcl_Obj *secondPtr (入力in)
  比較すべき二つの経路値の二番目｡値は経路型に変換される｡　 The second of two path values to compare. The value may be converted to path type.

Tcl_Obj *listObj (入力in)
  結合操作による結合すべき経路要素のリスト｡　 The list of path elements to operate on with a join operation.

int elements (入力in)
  listObj内の接合されるべき要素の数｡負数の場合､全要素が接合される｡ The number of elements in the listObj which should be joined together. If negative, then all elements are joined.

Tcl_Obj **errorPtr (出力out)
  不都合の場合､ファイルの名前を含む値で満たされる｡種々の 複写/名前変更 操作に於いて不都合を生じたファイルの名前を含む値で満たされる｡ 　 In the case of an error, filled with a value containing the name of the file which caused an error in the various copy/rename operations.

int index (入力in)
  疑問内の属性の索引番号｡ The index of the attribute in question.

Tcl_Obj *objPtr (入力in)
  操作内に設定すべき値｡ The value to set in the operation.

Tcl_Obj **objPtrRef (出力out)
  操作の結果を含む値で満たされる｡ 　 Filled with a value containing the result of the operation.

Tcl_Obj *resultPtr (出力out)
  成功裡に合致したファイル又はディレクトリーのリストをその中に保存(Tcl_ListObjAppendElement を使う)する為の事前-割当てされた値｡　 Preallocated value in which to store (using Tcl_ListObjAppendElement) the list of files or directories which are successfully matched.

int mode (入力in)
  R_OK と W_OK と X_OK と F_OK の一つ或いはそれ以上で構成した櫛｡ R_OK と W_OK と X_OK はそれぞれ､ファイルが実在し､読み､書き､実行権限を有するか否かを確認を要求する｡F_OK はファイルの実在を確認することを要求する｡ 　　　 Mask consisting of one or more of R_OK, W_OK, X_OK and F_OK. R_OK, W_OK and X_OK request checking whether the file exists and has read, write and execute permissions, respectively. F_OK just requests checking for the existence of the file.

Tcl_StatBuf *statPtr (出力out)
  最初と最後の操作の結果を含む構造｡　 The structure that contains the result of a stat or lstat operation.

const char *sym1 (入力in)
  ファイルの象徴の表を捜す為の手続函数の名前｡　 Name of a procedure to look up in the file's symbol table

const char *sym2 (入力in)
  ファイルの象徴の表を捜す為の手続函数の名前｡　 Name of a procedure to look up in the file's symbol table

Tcl_PackageInitProc **proc1Ptr (出力out)
  この符号命令の為の初期函数によって満たされる｡　 Filled with the init function for this code.

Tcl_PackageInitProc **proc2Ptr (出力out)
  この符号の為の安全な-初期函数により満たされる｡　 Filled with the safe-init function for this code.

void **clientDataPtr (出力out)
  それが呼ばれた時に､この符号命令の積込み解消機能を渡す clientData 値で満たされる｡ 　　　 Filled with the clientData value to pass to this code's unload function when it is called.

Tcl_LoadHandle *loadHandlePtr (出力out)
  積込まれたファイルを表現する字句の要旨により満たされる｡　　　 Filled with an abstract token representing the loaded file.

Tcl_FSUnloadFileProc **unloadProcPtr (出力out)
  符号命令のこの断片を解消する為に使用する函数によって満たされる｡　 Filled with the function to use to unload this piece of code.

Tcl_LoadHandle loadHandle (入力in)
  積込み解消されるべき積込まれた外部函数への取っ手｡　 　 Handle to the loaded library to be unloaded.

utimbuf *tval (入力in)
  この構造の中の時刻の利用と修正は､与えられたファイルの為のこのような値を設定する為に読み､使用される｡　 The access and modification times in this structure are read and used to set those values for a given file.

const char *modeString (入力in)
  ファイルが如何に利用されるかを指定する｡ Tcl のopen 命令に様式引数として許容されるどのような値でも好い｡　 Specifies how the file is to be accessed. May have any of the values allowed for the mode argument to the Tcl open command.

int permissions (入力in)
  POSIX-様式の使用許諾旗印､譬えば 0644 の如し｡もし新しいファイルが生成されると､これら使用許諾は生成されたファイルに設定される｡　 POSIX-style permission flags such as 0644. If a new file is created, these permissions will be set on the created file.

int *lenPtr (出力out)
  もし､非-NULL の場合､分割した経路の要素の数で満たされる｡　 If non-NULL, filled with the number of elements in the split path.

Tcl_Obj *basePtr (入力in)
  与えられた要素を､其処に接続すべき基本経路｡NULL でも好い｡　　 The base path on to which to join the given elements. May be NULL.

int objc (入力in)
  objv 内の要素の個数｡　 The number of elements in objv.

Tcl_Obj *const objv[] (入力in)
  与えられた基本経路に接続する要素｡　 　 The elements to join to the given base path.

Tcl_Obj *linkNamePtr (入力in)
  生成されるべき､又は読まれるべき連結の名前｡ 　　 The name of the link to be created or read.

Tcl_Obj *toPtr (入力in)
  linkNamePtr に呼ばれた連結が連結されるべきもの､或いは､ linkNamePtr により指定された象徴連結が読まれる場合は NULL である｡　 What the link called linkNamePtr should be linked to, or NULL if the symbolic link specified by linkNamePtr is to be read.

int linkAction (入力in)
  どの様な種類の連結が生成されるかを指し示す旗印の論理和組合わせ(もし toPtr が NULL なら無視される)｡設定すべき適正なビットは TCL_CREATE_SYMBOLIC_LINK と TCL_CREATE_HARD_LINK である｡両方が設定され､且つ基礎になっているファイル系が両方可能な場合､別名の連結の方が好まれる｡ 　　 OR-ed combination of flags indicating what kind of link should be created (will be ignored if toPtr is NULL). Valid bits to set are TCL_CREATE_SYMBOLIC_LINK and TCL_CREATE_HARD_LINK. When both flags are set and the underlying filesystem can do either, symbolic links are preferred.

### 説明 DESCRIPTION

access や stat の様な系の水準の函数を呼ぶ代りに Tcl_FS API 函数(譬えば､ Tcl_FSAccess や Tcl_FSStat)を呼ぶ幾つもの理由がある｡第１､それは､他のOSで動くので､それを呼ぶ機能拡張は Unix と Windows で修正なしに動く｡第２､Windows 実装のこれ等の函数は幾つかの系呼出し水準の不具合が修正された｡第３､これ等の函数呼出しは要求されるかもしれないどのような ““OS固有用のUtf”符号系” 列の変換も取扱う(又､引続く呼出しの多大な効果の為に､このような変換の結果を高速記憶する)｡第４､多分最も重要､これ等の全ての函数は ““仮想ファイル系に対する認識がある”” ｡登録されている( Tcl_FSRegister を通して)どのような仮想ファイル系も(VFS と略記する)､ファイル利用への経路を代理の媒体や利用方法に経路変更し得る｡これら全ての函数(又､相当する Tcl 命令の file, glob, pwd, cd, open, etc.)は固有のファイル系内の固有のファイルではない “ファイル類” を操作するかもしれない｡之は又､ API を通してファイル系(FS と略記する)を利用するどの Tcl 拡張も自動的に ““仮想ファイル系に対する認識がある”” 事を意味する｡勿論拡張機能が固有のファイル系を直接利用する場合(譬えば､OS固有の APIs,経由で)､ Tcl はその様な呼出を中止できない｡ 　　 There are several reasons for calling the Tcl_FS API functions (e.g. Tcl_FSAccess and Tcl_FSStat) rather than calling system level functions like access and stat directly. First, they will work cross-platform, so an extension which calls them should work unmodified on Unix and Windows. Second, the Windows implementation of some of these functions fixes some bugs in the system level calls. Third, these function calls deal with any “Utf to platform-native” path conversions which may be required (and may cache the results of such conversions for greater efficiency on subsequent calls). Fourth, and perhaps most importantly, all of these functions are “virtual filesystem aware”. Any virtual filesystem (VFS for short) which has been registered (through Tcl_FSRegister) may reroute file access to alternative media or access methods. This means that all of these functions (and therefore the corresponding file, glob, pwd, cd, open, etc. Tcl commands) may be operate on “files” which are not native files in the native filesystem. This also means that any Tcl extension which accesses the filesystem (FS for short) through this API is automatically “virtual filesystem aware”. Of course, if an extension accesses the native filesystem directly (through platform-specific APIs, for example), then Tcl cannot intercept such calls.

適切な仮想ファイル系が登録されている場合､ “ファイル” は二つの例を与える､遠隔の(譬えば､遠隔の ftp 中央集中機能に位置した)か､書庫か(譬えば､.zip 書庫の中に置いた)｡その様な登録されたファイル系は函数から全て又は幾らかのそこに列挙した機能性の実装への捜索表を提供する｡最後に､ Tcl_FSStat や Tcl_FSLstat の呼出しは､ ““構造の状態”” 緩衝域が実際に宣言されたことを取除いて､ 2GB バイト以上のファイルを運営しているOSと､運営していないOSの両方で同じ命令符号が使われることを許容する｡ 　　　 If appropriate VFSes have been registered, the “files” may, to give two examples, be remote (e.g. situated on a remote ftp server) or archived (e.g. lying inside a .zip archive). Such registered filesystems provide a lookup table of functions to implement all or some of the functionality listed here. Finally, the Tcl_FSStat and Tcl_FSLstat calls abstract away from what the “struct stat” buffer is actually declared to be, allowing the same code to be used both on systems with and systems without support for files larger than 2GB in size.

Tcl_FS API はTclの対象にされ､内部表現と他の経路関連文字列(譬えば､現在の活動ディレクトリー)を高速記憶するかもしれない｡これの一つの副作用は参照数零の対象内のこれらをどれかのこのような函数に渡せないことである｡その様な呼出しが処理されると､記憶域漏洩の結果になるかもしれず(ある環境下では､ファイル系命令符号は対象内の経路への参照を残すことを望むかもしれず､従ってこのようなどの呼出しから返った後も対象が依然として参照計数零を維持していると仮定してはならない - 増加しているかもしれない)､又は､確実にファイル系の決定の為に経路が完全に標準化と絶対呼称化することを要求された複合対象操作を通して一部が解放された対象の為に指示区域喪失(又は､他の記憶域利用の不都合)が生じるかもしれない｡これを知るこのような実践的教訓は､ 　　　　　　　　 The Tcl_FS API is Tcl_Obj-ified and may cache internal representations and other path-related strings (e.g. the current working directory). One side-effect of this is that one must not pass in values with a reference count of zero to any of these functions. If such calls were handled, they might result in memory leaks (under some circumstances, the filesystem code may wish to retain a reference to the passed in value, and so one must not assume that after any of these calls return, the value still has a reference count of zero - it may have been incremented) or in a direct segmentation fault (or other memory access error) due to the value being freed part way through the complex value manipulation required to ensure that the path is fully normalized and absolute for filesystem determination. The practical lesson to learn from this is that

    Tcl_Obj *path = Tcl_NewStringObj(...);
    Tcl_FSWhatever(path);
    Tcl_DecrRefCount(path);

は誤っており､記憶域不都合を生じるかもしれない｡ path はそこに渡すか､減少する前に､その参照計数を増加させなければならない｡この理由で､参照計数零の対象は有効なファイル系の経路とは看做されず､このような対象を伴うどの様な Tcl_FS API 呼出しの結果も活動は取られない｡ 　　　 is wrong, and may cause memory errors. The path must have its reference count incremented before passing it in, or decrementing it. For this reason, values with a reference count of zero are considered not to be valid filesystem paths and calling any Tcl_FS API function with such a value will result in no action being taken.

#### FS API FUNCTIONS

Tcl_FSCopyFileR は srcPathPtr によって与えられるファイルを destPathPtr によって与えられる経路名に複写しようと試みる｡もし与えられた二つの経路が同じファイル系( Tcl_FSGetFileSystemForPath に従って)にあると､ファイル系の ““ファイル複写”” 函数が呼ばれる(それが非-NULLの場合)｡それ以外の場合､函数は -1 を返し大域 C 変数 errno に POSIX 不都合符号 “EXDEV” を設定する(それは ““他領域との連結”” を意味する)｡ Tcl_FSCopyFile attempts to copy the file given by srcPathPtr to the path name given by destPathPtr. If the two paths given lie in the same filesystem (according to Tcl_FSGetFileSystemForPath) then that filesystem's “copy file” function is called (if it is non-NULL). Otherwise the function returns -1 and sets the errno global C variable to the “EXDEV” POSIX error code (which signifies a “cross-domain link”).

Tcl_FSCopyDirectory は srcPathPtr によって与えられるディレクトリーを destPathPtr によって与えられる経路名に複写しようと試みる｡もし与えられた二つの経路が同じファイル系にあると( Tcl_FSGetFileSystemForPath に従って)､ファイル系の ““ファイル複写”” 函数が呼ばれる(それが非-NULLの場合)｡それ以外の場合､函数は -1 を返し大域 C 変数 errno に POSIX 不都合符号 “EXDEV” を設定する(それは ““他領域との連結”” を意味する)｡Tcl_FSCopyDirectory attempts to copy the directory given by srcPathPtr to the path name given by destPathPtr. If the two paths given lie in the same filesystem (according to Tcl_FSGetFileSystemForPath) then that filesystem's “copy file” function is called (if it is non-NULL). Otherwise the function returns -1 and sets the errno global C variable to the “EXDEV” POSIX error code (which signifies a “cross-domain link”).

Tcl_FSCreateDirectory は pathPtr によって与えられるディレクトリーを所有するファイル系の “create directory” 函数によって作成しようと試みる｡ Tcl_FSCreateDirectory attempts to create the directory given by pathPtr by calling the owning filesystem's “create directory” function.

Tcl_FSDeleteFile は pathPtr によって与えられるディレクトリーを所有するファイル系の “delete file” 函数によって削除しようと試みる｡ Tcl_FSDeleteFile attempts to delete the file given by pathPtr by calling the owning filesystem's “delete file” function.

Tcl_FSRemoveDirectory は pathPtr によって与えられるディレクトリーを所有するファイル系の “remove directory” 函数によって取除こうと試みる｡ Tcl_FSRemoveDirectory attempts to remove the directory given by pathPtr by calling the owning filesystem's “remove directory” function.

Tcl_FSRenameFile は srcPathPtr によって与えられるファイル又はディレクトリーを destPathPtr によって与えられる経路名に名前交替しようと試みる｡もし与えられた二つの経路が同じファイル系にあると( Tcl_FSGetFileSystemForPath に従って)､ファイル系の ““ファイル名前変更”” 函数が呼ばれる(それが非-NULLの場合)｡それ以外の場合､函数は -1 を返し大域 C 変数 errno に POSIX 不都合符号 “EXDEV” を設定する(それは ““他領域との連結”” を意味する)｡ Tcl_FSRenameFile attempts to rename the file or directory given by srcPathPtr to the path name given by destPathPtr. If the two paths given lie in the same filesystem (according to Tcl_FSGetFileSystemForPath) then that filesystem's “rename file” function is called (if it is non-NULL). Otherwise the function returns -1 and sets the errno global C variable to the “EXDEV” POSIX error code (which signifies a “cross-domain link”).

Tcl_FSListVolumes は非-NULL “list volumes” 函数を有する夫々のファイ系を呼び､その根本の巻のリストを返す様要請する｡それは､戻された値を､呼出し側に返すリスト内に累積する(参照計数 0として)｡ Tcl_FSListVolumes calls each filesystem which has a non-NULL “list volumes” function and asks them to return their list of root volumes. It accumulates the return values in a list which is returned to the caller (with a reference count of 0).

Tcl_FSEvalFileEx は pathPtr によって与えられるファイルを encodingName によって識別される符号系を使って読み､その内容を Tcl 記述譜として評価する｡それは Tcl_EvalObjEx と同じ情報を返す｡もし encodingName が NULL,の場合､系の符号系はファイル内容を読む為に使われる｡もしファイルが読めない場合､何故ファイルが読めないかを記述する Tcl 不都合符号が返される｡全てのOSの為のファイルの末尾文字は “\x1A” (^Z) である｡もし文字列比較の符号内に “^Z” が要求される場合､ “\x1A” が使用でき､それは Tcl 解釈実行機能により安全に “^Z”. に置換される｡ Tcl_FSEvalFile は Tcl_FSEvalFileEx の簡易版であって､それは､ファイルを読むときは常に系の符号系を使用する｡ Tcl_FSEvalFileEx reads the file given by pathPtr using the encoding identified by encodingName and evaluates its contents as a Tcl script. It returns the same information as Tcl_EvalObjEx. If encodingName is NULL, the system encoding is used for reading the file contents. If the file could not be read then a Tcl error is returned to describe why the file could not be read. The eofchar for files is “\x1A” (^Z) for all platforms. If you require a “^Z” in code for string comparison, you can use “\x1A”, which will be safely substituted by the Tcl interpreter into “^Z”. Tcl_FSEvalFile is a simpler version of Tcl_FSEvalFileEx that always uses the system encoding when reading the file.

Tcl_FSLoadFile は動的に二進符号ファイルを記憶域に積込みファイル内に定義されている場合は二つの手続函数の番地を返す｡ファイル系に属する適切な函数が呼出される｡ファイル系がこの函数に実装されていない場合､ Tcl はファイルを臨時的ディレクトリーに複写を試み､その臨時ファイルの積込みを試みる｡ Tcl_FSUnloadFile は処理課程から取除かれる為に loadHandle により指し示される外部函数の為に求められ､操作を逆にする｡註意すべきは unload 命令と異なり､これは外部函数に浄化する機会を与える事はない｡ Tcl_FSLoadFile dynamically loads a binary code file into memory and returns the addresses of two procedures within that file, if they are defined. The appropriate function for the filesystem to which pathPtr belongs will be called. If that filesystem does not implement this function (most virtual filesystems will not, because of OS limitations in dynamically loading binary code), Tcl will attempt to copy the file to a temporary directory and load that temporary file. Tcl_FSUnloadFile reverses the operation, asking for the library indicated by the loadHandle to be removed from the process. Note that, unlike with the unload command, this does not give the library any opportunity to clean up.

上記の両方の函数は標準 Tcl 完成符号を返す｡もし不都合が生じると不都合伝言文が解釈実行機能内に結果が残される｡ 　　　 Both the above functions return a standard Tcl completion code. If an error occurs, an error message is left in the interp's result.

loadHandlePtr によって指し示される変数経由で提供される字句は Tcl_FindSymbol で使われるかもしれない｡ 　　 The token provided via the variable indicated by loadHandlePtr may be used with Tcl_FindSymbol.

Tcl_FSMatchInDirectory は与えられた紋様に合致する全てのファイルの為にディレクトリーを探す為の展開符号によって使われる｡ pathPtr が属している､ファイル系の為の適切な函数が呼出される｡ Tcl_FSMatchInDirectory is used by the globbing code to search a directory for all files which match a given pattern. The appropriate function for the filesystem to which pathPtr belongs will be called.

返り値は展開で不都合が生じたことを指し示す Tcl 標準結果である｡不都合伝言文は解釈実行機能内に残される(許容される解釈実行機能が NULL でない限り)が､良好な結果は与えられた resultPtr に置かれる｡ The return value is a standard Tcl result indicating whether an error occurred in globbing. Error messages are placed in interp (unless interp is NULL, which is allowed), but good results are placed in the resultPtr given.

註意すべきは展開符号命令globは内部に再起的紋様を実装するので､この函数は単に単純紋様を渡す､それは string match の論理を使って合致させることができる｡再起を処理する為､ Tcl はこの函数をしばしば返されるディレクトリーの為のみの問合せにする｡ NULL 紋様を伴う特別場合の呼出しは検査が要求される経路は正しい型のみであることを指し示す｡ 　　 Note that the glob code implements recursive patterns internally, so this function will only ever be passed simple patterns, which can be matched using the logic of string match. To handle recursion, Tcl will call this function frequently asking only for directories to be returned. A special case of being called with a NULL pattern indicates that the path needs to be checked only for the correct type.

Tcl_FSLink は readlink の外部函数版番号を取り替え､連結の作成を運営する為に拡張する｡ linkNamePtr が属するファイル系の為の適切な函数が呼出される｡ Tcl_FSLink replaces the library version of readlink, and extends it to support the creation of links. The appropriate function for the filesystem to which linkNamePtr belongs will be called.

toPtr が NULLの場合､ ““連結を読む”” 行動が遂行される｡結果は linkNamePtr によって与えられる記号の連結の内容を指定する Tcl_Obj であるか､連結が読めない場合は NULL である｡結果は呼出し側によって所有され､結果が最早必要ではない時は､それは Tcl_DecrRefCount を呼ぶべきである｡ toPtr が NULL でない場合､ Tcl は linkAction 旗印内に渡された型の一つの連結を作成するであろう｡この旗印は TCL_CREATE_SYMBOLIC_LINK と TCL_CREATE_HARD_LINK の､論理和の組合せである｡選択が実在する場合(即ち､一つ以上の旗印が渡される)､ Tcl 変換は記号連結が優先される｡連結が成功裏に作成された時､返り値は toPtr であろう(それは､従って呼出し側に所有されている)｡不成功の場合､ NULL が返される｡ 　　　 If the toPtr is NULL, a “read link” action is performed. The result is a Tcl_Obj specifying the contents of the symbolic link given by linkNamePtr, or NULL if the link could not be read. The result is owned by the caller, which should call Tcl_DecrRefCount when the result is no longer needed. If the toPtr is not NULL, Tcl should create a link of one of the types passed in in the linkAction flag. This flag is an OR'ed combination of TCL_CREATE_SYMBOLIC_LINK and TCL_CREATE_HARD_LINK. Where a choice exists (i.e. more than one flag is passed in), the Tcl convention is to prefer symbolic links. When a link is successfully created, the return value should be toPtr (which is therefore already owned by the caller). If unsuccessful, NULL is returned.

Tcl_FSLstat は Tcl_StatBuf 構造を指定されたファイルに関する情報 statPtr で満たす｡この情報を得る為のファイルへの利用権限は必要ないが､ファイルに導く名前の付いた経路内の全てのディレクトリーを捜す権限が必要である｡状態構造 Tcl_StatBuf は､装置､inode (Windowsでは常に 0 )､特権モード､ nlink (Windowsでは常に 1 )､使用者認識番号(Windowsでは常に 0 )､群認識番号(Windowsでは常に 0 )､根本の装置(Windowsでは装置に等しい)､寸法､最終利用時刻､最終修正時刻､最終媒体交換時刻を考慮した情報を含む｡ Tcl_StatBuf 構造を割当て利用する為に如何に移植できる符号を書くかに就いての記述は PORTABLE STAT RESULT API を参照されたい｡ Tcl_FSLstat fills the Tcl_StatBuf structure statPtr with information about the specified file. You do not need any access rights to the file to get this information but you need search rights to all directories named in the path leading to the file. The Tcl_StatBuf structure includes info regarding device, inode (always 0 on Windows), privilege mode, nlink (always 1 on Windows), user id (always 0 on Windows), group id (always 0 on Windows), rdev (same as device on Windows), size, last access time, last modification time, and last metadata change time. See PORTABLE STAT RESULT API for a description of how to write portable code to allocate and access the Tcl_StatBuf structure.

path が実在する場合､ Tcl_FSLstat は 0 を返し､状態構造はデータで満たされる｡そうでない場合は -1 が返され､状態情報は与えられない｡ 　　　 If path exists, Tcl_FSLstat returns 0 and the stat structure is filled with data. Otherwise, -1 is returned, and no stat info is given.

Tcl_FSUtime は utime の外部函数版番号を置換える｡ Tcl_FSUtime replaces the library version of utime.

これは成功すると 0 ､不都合の場合 -1 を返す( utime の説明書に従って)｡成功すると､函数は与えられたファイルの “atime” と “mtime” 値を更新する｡ 　　 This returns 0 on success and -1 on error (as per the utime documentation). If successful, the function will update the “atime” and “mtime” values of the file given.

Tcl_FSFileAttrsGet は留め得る副命令 file attributes に対する読む利用を実装する｡ pathPtr が属するファイル系の為の適切な函数が呼出される｡ Tcl_FSFileAttrsGet implements read access for the hookable file attributes subcommand. The appropriate function for the filesystem to which pathPtr belongs will be called.

もし結果が TCL_OK の場合､値は objPtrRef に置かれる､それは臨時的に適正になる( Tcl_IncrRefCount が呼ばれない限り)｡ If the result is TCL_OK, then a value was placed in objPtrRef, which will only be temporarily valid (unless Tcl_IncrRefCount is called).

Tcl_FSFileAttrsSet は擬装可能な副命令 file attributes に対して書込み機能を実装する｡ pathPtr が属するファイル系の為の適切な函数が呼出される｡ Tcl_FSFileAttrsSet implements write access for the hookable file attributes subcommand. The appropriate function for the filesystem to which pathPtr belongs will be called.

Tcl_FSFileAttrStrings は擬装可能な副命令 file attributes の部分を実装する｡ pathPtr が属するファイル系の為の適切な函数が呼出される｡ Tcl_FSFileAttrStrings implements part of the hookable file attributes subcommand. The appropriate function for the filesystem to which pathPtr belongs will be called.

呼ばれた手続函数は文字列の配列を返すか､代りに NULL を返し Tcl リストを与えられた objPtrRef に置く｡ Tcl はそのリストを取り､最初にそれを使う前にその参照計数を増加する｡使用時の比較では､ Tcl は参照計数を減ずる｡そこで､もしリストが Tcl が完了した時に遺棄されると､それは参照回数零を有する､そこで､もしリストが遺棄しないと､ファイル系は値への参照計数を維持する｡ 　　　 The called procedure may either return an array of strings, or may instead return NULL and place a Tcl list into the given objPtrRef. Tcl will take that list and first increment its reference count before using it. On completion of that use, Tcl will decrement its reference count. Hence if the list should be disposed of by Tcl when done, it should have a reference count of zero, and if the list should not be disposed of, the filesystem should ensure it retains a reference count to the value.

Tcl_FSAccess は手続函数は名前が pathname の実在のファイル(又は他のファイル対象)が読み書き､試験を許容するか否かを検査する｡もし pathname が Unix 上の記号連結である場合､この記号連結により参照されたファイルの権限が試験される｡ Tcl_FSAccess checks whether the process would be allowed to read, write or test for existence of the file (or other filesystem object) whose name is pathname. If pathname is a symbolic link on Unix, then permissions of the file referred by this symbolic link are tested.

成功すると零が返される(全ての要求された許可が認められた)｡失敗の場合(少なくとも､許可を問合わされた様式の一つのビットが否定されたか､他の不都合が生じた)､-1 が返される｡ 　　　 On success (all requested permissions granted), zero is returned. On error (at least one bit in mode asked for a permission that is denied, or some other error occurred), -1 is returned.

Tcl_FSStat は Tcl_StatBuf 構造を指定されたファイルに関する情報 statPtr で満たす｡この情報を得る為にはファイルへの利用権限は必要ないが､ファイルに通じる経路内の全ての名前の付いたディレクトリーを捜す権限が必要である｡状態構造 Tcl_StatBuf は､装置､inode (Windowsでは常に 0 )､特権モード､ nlink (Windowsでは常に 1 )､使用者認識番号(Windowsでは常に 0 )､群認識番号(Windowsでは常に 0 )､根本の装置(Windowsでは装置に等しい)､寸法､最終利用時刻､最終修正時刻､最終媒体交換時刻を考慮した情報を含む｡ Tcl_StatBuf 構造を割当て利用する為に如何に移植できる符号を書くかに就いての記述は PORTABLE STAT RESULT API を参照されたい｡ Tcl_FSStat fills the Tcl_StatBuf structure statPtr with information about the specified file. You do not need any access rights to the file to get this information but you need search rights to all directories named in the path leading to the file. The Tcl_StatBuf structure includes info regarding device, inode (always 0 on Windows), privilege mode, nlink (always 1 on Windows), user id (always 0 on Windows), group id (always 0 on Windows), rdev (same as device on Windows), size, last access time, last modification time, and last metadata change time. See PORTABLE STAT RESULT API for a description of how to write portable code to allocate and access the Tcl_StatBuf structure.

path が実在する場合､ Tcl_FSStat は 0 を返し､状態構造はデータで満たされる｡そうでない場合は -1 が返され､状態情報は与えられない｡ If path exists, Tcl_FSStat returns 0 and the stat structure is filled with data. Otherwise, -1 is returned, and no stat info is given.

Tcl_FSOpenFileChannel は pathPtr によって指定されたファイルを開き､通信路処理機能を返す､それはファイル上の入力と出力の遂行に使うことができる｡この API はUnix 標準入出力外部函数の fopen 手続函数の後に模型化する事ができる｡全ての引数の構文と意味はファイルを開けるとき Tcl open 命令内に与えられたものに似ている｡もし通信路を開ける間に､不都合が生じると､ Tcl_FSOpenFileChannel は NULL を返し､ Tcl_GetErrno により取戻す事ができる POSIX 不都合符号を記録する｡更に､解釈実行機能interpが非-NULL の場合､ Tcl_FSOpenFileChannel は不都合伝言文を解釈実行機能interpの結果のどれかの不都合の後に残す｡ Tcl_FSOpenFileChannel opens a file specified by pathPtr and returns a channel handle that can be used to perform input and output on the file. This API is modeled after the fopen procedure of the Unix standard I/O library. The syntax and meaning of all arguments is similar to those given in the Tcl open command when opening a file. If an error occurs while opening the channel, Tcl_FSOpenFileChannel returns NULL and records a POSIX error code that can be retrieved with Tcl_GetErrno. In addition, if interp is non-NULL, Tcl_FSOpenFileChannel leaves an error message in interp's result after any error.

新しく作成された通信路は経供された解釈実行機能内に登録されていない; 登録する為に､ Tcl_RegisterChannel を使う｡もし標準通信路の stdin か stdout か stderr の内の一つが事前に閉じられている場合､新しい通信路を作成する行為が標準通信路の置換えとして代入する｡ 　　　 The newly created channel is not registered in the supplied interpreter; to register it, use Tcl_RegisterChannel. If one of the standard channels, stdin, stdout or stderr was previously closed, the act of creating the new channel also assigns it as a replacement for the standard channel.

Tcl_FSGetCwd は getcwd の外部函数版番号を置換える｡ Tcl_FSGetCwd replaces the library version of getcwd.

それは Tcl 外部函数の現在の活動ディレクトリーを返す｡これは固有のOSの活動ディレクトリーとは異なるかもしれない､これは現在の活動ディレクトリーが固有のファイル系のものでないときに生じる｡ 　　　 It returns the Tcl library's current working directory. This may be different to the native platform's working directory, which happens when the current working directory is not in the native filesystem.

現在の辞書を指定する Tcl_Obj へのポインターか､現在のディレクトリーが決定できない場合は NULL を返す｡もし NULL が返されると､不都合伝言文が解釈実行機能interpの結果に残される｡ 　　　 The result is a pointer to a Tcl_Obj specifying the current directory, or NULL if the current directory could not be determined. If NULL is returned, an error message is left in the interp's result.

結果は呼出し側の為に既にその参照計数を増加させている｡それが最早必要ない時､その参照係数は減ぜられる｡それは多重時分割での安全の目的で必要とされ､その間､結果が常に適正であることが確実にして､多重時分割が､これとその関連機能を利用することを可能にしている｡　　　 The result already has its reference count incremented for the caller. When it is no longer needed, that reference count should be decremented. This is needed for thread-safety purposes, to allow multiple threads to access this and related functions, while ensuring the results are always valid.

Tcl_FSChdir は chdir の外部函数の版番号を置換える｡経路は標準化されそれを宣言するファイル系に渡される｡ファイル系がこの機能を実装していない場合､ Tcl は､ディレクトリーが実在して適切な権限を有しているか否かの､状態と利用の組合せに後退する｡ Tcl_FSChdir replaces the library version of chdir. The path is normalized and then passed to the filesystem which claims it. If that filesystem does not implement this function, Tcl will fallback to a combination of stat and access to check whether the directory exists and has appropriate permissions.

結果に就いては chdir 説明文を参照されたい｡成功すると､引続く Tcl_FSGetCwd の呼出しの為に cwdPathPtr 内に成功した経路を記録する｡　　　 For results, see chdir documentation. If successful, we keep a record of the successful path in cwdPathPtr for subsequent calls to Tcl_FSGetCwd.

Tcl_FSPathSeparator は pathPtr によって指定された経路の最も特殊な要素のために使われる区切り文字を返す(即ち､経路の最終部分)｡ Tcl_FSPathSeparator returns the separator character to be used for most specific element of the path specified by pathPtr (i.e. the last part of the path).

区切り文字は長さの 1 の文字列を含む Tcl_Obj として返される｡経路が不適当の場合､ NULL が返される｡ 　　 The separator is returned as a Tcl_Obj containing a string of length 1. If the path is invalid, NULL is returned.

Tcl_FSJoinPath は与えられた適正なはずのリスト Tcl_Obj をとり(それは参照計数零を有する事が許容される)､適正な経路要素としての第１ elements 要素を考慮して与えられた経路値を返す(それぞれの経路要素は完全な経路､部分的経路､単一の可能なディレクトリーかファイル名かも知れない)｡もし何かの経路要素が実際､絶対経路の場合､全てのそれより前の経路要素は遺棄される｡もし elements が 0 より小さい場合､全体のリストを使う｡ Tcl_FSJoinPath takes the given Tcl_Obj, which must be a valid list (which is allowed to have a reference count of zero), and returns the path value given by considering the first elements elements as valid path segments (each path segment may be a complete path, a partial path or just a single possible directory or file name). If any path segment is actually an absolute path, then all prior path segments are discarded. If elements is less than 0, we use the entire list.

返された対象は実際与えられたリストの要素である､そこで呼出し側はリストを解放する前に参照計数を増加する事に註意を払うべきである｡ 　　　 It is possible that the returned value is actually an element of the given list, so the caller should be careful to increment the reference count of the result before freeing the list.

返された値は､典型的には参照計数零であり(しかし､ある条件下では共有されているかもしれない)､結合した経路を含む｡呼出し側は､参照計数を使う前に値に加えなければならない｡特に､返された値は与えられたリストの要素かもしれず､そこでリストの解放はもし参照計数を取っていない場合､対象の解放が早すぎるかもしれない｡もし､要素の数が零の場合､返された値は空文字列 Tcl_Obj になる｡ The returned value, typically with a reference count of zero (but it could be shared under some conditions), contains the joined path. The caller must add a reference count to the value before using it. In particular, the returned value could be an element of the given list, so freeing the list might free the value prematurely if no reference count has been taken. If the number of elements is zero, then the returned value will be an empty-string Tcl_Obj.

Tcl_FSSplitPath は適正な経路の筈の､与えられた Tcl_Obj をとり､要素として夫々の経路の要素を含む Tcl リスト値を返す｡それは参照計数零のリスト値を返す｡もし lenPtr 内に非-NULL,が渡されると､それが指す変数は､返されたリスト内の要素の数を含む様に更新される｡ Tcl_FSSplitPath takes the given Tcl_Obj, which should be a valid path, and returns a Tcl list value containing each segment of that path as an element. It returns a list value with a reference count of zero. If the passed in lenPtr is non-NULL, the variable it points to will be updated to contain the number of elements in the returned list.

Tcl_FSEqualPaths は与えられた二つの経路が同じファイル系対象を表現しているかを試験する｡経路が同じ場合は 1 を返し､異なる場合は 0 を返す｡どちらかの経路が NULL の場合常に 0 が返される｡ Tcl_FSEqualPaths tests whether the two paths given represent the same filesystem object. It returns 1 if the paths are equal, and 0 if they are different. If either path is NULL, 0 is always returned.

Tcl_FSGetNormalizedPath は､与えられたTcl_Obj から､ファイルの為に唯一の識別子として使用可能な文字列値の唯一の標準化された経路表現を抽出する｡ Tcl_FSGetNormalizedPath attempts to extract from the given Tcl_Obj a unique normalized path representation, whose string value can be used as a unique identifier for the file.

それは Tcl によって所有された､標準化された経路値を返す､但し経路が不適であるか､それ以外に成功裏に変換できない場合は NULL を返す｡絶対表現の標準化された経路の抽出は非常に効果的である(ファイル系は内部的にこの表現で操作しているから)､但し､ファイル系が数的記号連結を含む時は､結果は使用者に親しみのある経路の版ではないかもしれない｡返り値は Tcl に所有され､渡された pathPtr に等価な寿命を有する(それが相対経路でない限り､その場合は標準化経路値は何時でも cwd が変更されたら解放される) - 呼出し側は､勿論､複写を長く維持したい場合は参照計数を増加できる｡ 　　 It returns the normalized path value, owned by Tcl, or NULL if the path was invalid or could otherwise not be successfully converted. Extraction of absolute, normalized paths is very efficient (because the filesystem operates on these representations internally), although the result when the filesystem contains numerous symbolic links may not be the most user-friendly version of a path. The return value is owned by Tcl and has a lifetime equivalent to that of the pathPtr passed in (unless that is a relative path, in which case the normalized path value may be freed any time the cwd changes) - the caller can of course increment the reference count if it wishes to maintain a copy for longer.

Tcl_FSJoinToPath は与えられた値をとる､それは通常､適正な経路か NULL である､而して､その上に与えられた経路要素の配列を結合する｡ Tcl_FSJoinToPath takes the given value, which should usually be a valid path or NULL, and joins onto it the array of paths segments given.

値を返す､典型的には参照計数零であり(しかし､ある条件下では共有化されるかもしれない)､結合された経路を含む｡呼出し側はそれを使用する前に参照計数を値に加えなければならない｡もしこの函数に渡たされたどれかの値が(pathPtr か path 要素)参照計数零を有している場合､この函数が返った時にそれらは解放される｡ 　　　 Returns a value, typically with reference count of zero (but it could be shared under some conditions), containing the joined path. The caller must add a reference count to the value before using it. If any of the values passed into this function (pathPtr or path elements) have a reference count of zero, they will be freed when this function returns.

Tcl_FSConvertToPathType は､ 縦え値が既に恐らく正しい型であっても､cwd が変化したかもしれないことを考慮して､与えられた Tcl_Obj を適正な Tcl 経路型に変換を試みる｡ファイルの名前は “~” (現在の使用者の我が家ディレクトリーを指し示す)か “~<user>” (どの使用者かの我が家ディレクトリーを指し示す)で始まるかもしれない｡ Tcl_FSConvertToPathType tries to convert the given Tcl_Obj to a valid Tcl path type, taking account of the fact that the cwd may have changed even if this value is already supposedly of the correct type. The filename may begin with “~” (to indicate current user's home directory) or “~<user>” (to indicate any user's home directory).

もし変換が成功すると(即ち､値が現在のファイル系の一つの中で適正な経路である)､ TCL_OK が返される｡それ以外では TCL_ERROR が返され､解釈実行機能内に不都合伝言文が残される｡ 　　 If the conversion succeeds (i.e. the value is a valid path in one of the current filesystems), then TCL_OK is returned. Otherwise TCL_ERROR is returned, and an error message may be left in the interpreter.

Tcl_FSGetInternalRep は与えられた経路値から内部表現を与えられたファイル系に抽出する｡もし､経路値が異なるファイル系に属する場合､ NULL を返す｡内部表現が現在 NULL の場合､ファイル系の Tcl_FSCreateInternalRepProc を呼出して発生しようと試みる｡ Tcl_FSGetInternalRep extracts the internal representation of a given path value, in the given filesystem. If the path value belongs to a different filesystem, we return NULL. If the internal representation is currently NULL, we attempt to generate it, by calling the filesystem's Tcl_FSCreateInternalRepProc.

NULL か適正な内部経路表現を返す｡この内部表現は高速記憶域に記憶され､従ってこの函数への繰返し呼び出しは追加的変換が必要である｡ 　　　 Returns NULL or a valid internal path representation. This internal representation is cached, so that repeated calls to this function will not require additional conversions.

Tcl_FSGetTranslatedPath は与えられた Tcl_Obj から翻訳された経路の抽出を試みる｡ Tcl_FSGetTranslatedPath attempts to extract the translated path from the given Tcl_Obj.

もし翻訳が成功すると(即ち､値が適正な経路である)､それが返される｡そうでない場合､ NULL が返される､そして解釈実行機能内に不都合伝言文が残される｡ “翻訳された” 経路は “~” も “~user” 文字並びも含まない(それらは､ファイル系内の現在の表現に拡張される)｡返された値は呼出し側に所有されている､それは其処に保存されているべき､又は､記憶域が確実に解放される為に Tcl_DecrRefCount を呼ぶべきである｡この函数は実務的ではなく､大部分の目的には通常 Tcl_FSGetNormalizedPath か Tcl_FSGetNativePath がよりよい函数である｡ 　　　 If the translation succeeds (i.e. the value is a valid path), then it is returned. Otherwise NULL will be returned, and an error message may be left in the interpreter. A “translated” path is one which contains no “~” or “~user” sequences (these have been expanded to their current representation in the filesystem). The value returned is owned by the caller, which must store it or call Tcl_DecrRefCount to ensure memory is freed. This function is of little practical use, and Tcl_FSGetNormalizedPath or Tcl_FSGetNativePath are usually better functions to use for most purposes.

Tcl_FSGetTranslatedStringPath は Tcl_FSGetTranslatedPath と同じであるが､文字の文字列か NULL を返す｡返された文字列は動的に割当てられ､呼出し側に所有される､それは保存するか確実に解放する為に Tcl_Free を呼ぶ必要がある｡再度 Tcl_FSGetNormalizedPath か Tcl_FSGetNativePath が殆どの目的にはより好ましい函数である｡(訳註:ckfree->Tcl_Free) Tcl_FSGetTranslatedStringPath does the same as Tcl_FSGetTranslatedPath, but returns a character string or NULL. The string returned is dynamically allocated and owned by the caller, which must store it or call ckfree to ensure it is freed. Again, Tcl_FSGetNormalizedPath or Tcl_FSGetNativePath are usually better functions to use for most purposes.

Tcl_FSNewNativePath は通常の obj->path->nativerep [対象→経路→固有表現]変換の何か逆を遂行する｡もしある符号命令が固有の形式内に経路を取出す場合(譬えば､ readlink や固有問合せ箱から)､且つその経路が Tcl 水準である場合､この函数呼出しは適正な経路値型作成に効果的である｡ Tcl_FSNewNativePath performs something like the reverse of the usual obj->path->nativerep conversions. If some code retrieves a path in native form (from, e.g. readlink or a native dialog), and that path is to be used at the Tcl level, then calling this function is an efficient way of creating the appropriate path value type.

結果の値は純粋な “経路” 値であり､それはなにかの Tcl 符号命令によって要求されている場合､ UTF-8 文字列表現のみが受入れられる｡ 　　　 The resulting value is a pure “path” value, which will only receive a UTF-8 string representation if that is required by some Tcl code.

Tcl_FSGetNativePath は Win/Unix 固有ファイル系によって使用される､それで容易に固有の(char* or TCHAR*)経路の表現を取出せる｡この函数は Tcl_FSGetInternalRep 回りの利用に便利である｡それは将来の､非-文字列-基本の固有表現(譬えば､ macOS 上では FSRef 構造のファイル基準を使う表現がより効果的かもしれない)の保有に望ましい｡ Windows では完全ユニコード表現が長さ制限なしの経路を許容する｡現在､表現は単純な文字列であり､それは相対的経路か固有符号系での完全な絶対標準経路を含むかもしれない(複合状態はどちらが供給されているかを命令する､そこで経路が絶対表現であると判る迄どちらでもない)｡絶対表現であるべき固有経路が必要な場合､標準経路の固有版を要求するべきである｡もしある理由で非絶対､非標準化経路の版が必要の場合､それは別途構築する必要がある(譬えば､ Tcl_FSGetTranslatedPath を使用して)｡ Tcl_FSGetNativePath is for use by the Win/Unix native filesystems, so that they can easily retrieve the native (char* or TCHAR*) representation of a path. This function is a convenience wrapper around Tcl_FSGetInternalRep. It may be desirable in the future to have non-string-based native representations (for example, on macOS, a representation using a fileSpec of FSRef structure would probably be more efficient). On Windows a full Unicode representation would allow for paths of unlimited length. Currently the representation is simply a character string which may contain either the relative path or a complete, absolute normalized path in the native encoding (complex conditions dictate which of these will be provided, so neither can be relied upon, unless the path is known to be absolute). If you need a native path which must be absolute, then you should ask for the native version of a normalized path. If for some reason a non-absolute, non-normalized version of the path is needed, that must be constructed separately (e.g. using Tcl_FSGetTranslatedPath).

固有の表現は高速域に記憶されるので､この函数の繰返し呼出しは追加的変換は要求されない｡返り値は Tcl に所有され､寿命は渡された pathPtr に等価である(相対経路でない限り､その場合固有表現は何時でも cwd が変化した時に解放される)｡ 　　　　 The native representation is cached so that repeated calls to this function will not require additional conversions. The return value is owned by Tcl and has a lifetime equivalent to that of the pathPtr passed in (unless that is a relative path, in which case the native representation may be freed any time the cwd changes).

Tcl_FSFileSystemInfo は二つの要素のリストを返す｡第１要素はファイル系の名前(譬えば､ “native”, “vfs”, “zip”, や “prowrap” とか)､第二要素はファイル系内部で与えられた経路の特定の型(それはファイル系に依存する)である｡第２の要素は､ファイル系が更なるファイルの分類を提供しない場合は空であるかもしれない｡ Tcl_FSFileSystemInfo returns a list of two elements. The first element is the name of the filesystem (e.g. “native”, “vfs”, “zip”, or “prowrap”, perhaps), and the second is the particular type of the given path within that filesystem (which is filesystem dependent). The second element may be empty if the filesystem does not provide a further categorization of files.

経路値が認識される限り､適正なリスト値が返される､認識されない場合 NULL が返される｡ 　　　　 A valid list value is returned, unless the path value is not recognized, when NULL will be returned.

Tcl_FSGetFileSystemForPath は Tcl_Filesystem へのポインターを返す､それは適正な経路として受入れられる｡ Tcl_FSGetFileSystemForPath returns a pointer to the Tcl_Filesystem which accepts this path as valid.

もしどのファイル系も経路を受入れない場合 NULL が返される｡ 　　　 If no filesystem will accept the path, NULL is returned.

Tcl_FSGetPathType は与えられた経路が現在のディレクトリーに相対的か現在の巻に相対的か､絶対表現かを定める｡ Tcl_FSGetPathType determines whether the given path is relative to the current directory, relative to the current volume, or absolute.

それは TCL_PATH_ABSOLUTE か TCL_PATH_RELATIVE かTCL_PATH_VOLUME_RELATIVE の内の一つを返す｡ 　　　　 It returns one of TCL_PATH_ABSOLUTE, TCL_PATH_RELATIVE, or TCL_PATH_VOLUME_RELATIVE

#### PORTABLE STAT RESULT API

Tcl_AllocStatBuf は Tcl_StatBuf を系の広域記憶域に割付ける(それは Tcl_Free に渡されて割付解除されるかもしれない)｡これは緩衝域の寸法依存なしに Tcl_FSStat と Tcl_FSLstat を起動する為の拡張を許容する｡それは代りに､ Tcl.総翻訳に使われた旗印に依存する｡(訳註:ckfree->Tcl_Free) Tcl_AllocStatBuf allocates a Tcl_StatBuf on the system heap (which may be deallocated by being passed to ckfree). This allows extensions to invoke Tcl_FSStat and Tcl_FSLstat without being dependent on the size of the buffer. That in turn depends on the flags used to build Tcl.

Tcl_StatBuf の互換性欄は次の函数を使用して読める､夫々が返した相当する欄の値は下の表に列挙した｡註意すべきはあるOS上では Tcl_StatBuf 内の他の欄があり､それは系の構造に適している別名であるから､但し移植可能なもののみがここで利用できる｡これ等の欄の全部の記述には系の説明文を参照されたい｡ 　　　 The portable fields of a Tcl_StatBuf may be read using the following functions, each of which returns the value of the corresponding field listed in the table below. Note that on some platforms there may be other fields in the Tcl_StatBuf as it is an alias for a suitable system structure, but only the portable ones are made available here. See your system documentation for a full description of these fields.

  Access Function | Field
  Tcl_GetFSDeviceFromStat | st_dev
  Tcl_GetFSInodeFromStat | st_ino
  Tcl_GetModeFromStat | st_mode
  Tcl_GetLinkCountFromStat | st_nlink
  Tcl_GetUserIdFromStat | st_uid
  Tcl_GetGroupIdFromStat | st_gid
  Tcl_GetDeviceTypeFromStat | st_rdev
  Tcl_GetAccessTimeFromStat | st_atime
  Tcl_GetModificationTimeFromStat | st_mtime
  Tcl_GetChangeTimeFromStat | st_ctime
  Tcl_GetSizeFromStat | st_size
  Tcl_GetBlocksFromStat | st_blocks
  Tcl_GetBlockSizeFromStat | st_blksize

### THE VIRTUAL FILESYSTEM API

ファイル系は Tcl_Filesystem 構造を提供する､それはファイル系上の種々の操作を実装する函数へのポインターを含む; これらの操作は一般層により必要とされ起動される､それは一般に上に列挙した函数を通して生じる｡ 　　　　 A filesystem provides a Tcl_Filesystem structure that contains pointers to functions that implement the various operations on a filesystem; these operations are invoked as needed by the generic layer, which generally occurs through the functions listed above.

Tcl_Filesystem 構造は次の手段を使って操作される｡ 　　　 The Tcl_Filesystem structures are manipulated using the following methods.

Tcl_FSRegister はファイル系構造へのポインターと､そのファイル系に結合した追加指定の､データ片を取る｡この函数の呼出しでは､ Tcl はファイル系を既知のファイル系のリストに着け､直ちに完全な機能になる｡Tcl は同じファイル系が多数回登録されたかを検査しない(一般的にはこれは好ましくない)｡TCL_OK が返される｡ Tcl_FSRegister takes a pointer to a filesystem structure and an optional piece of data to associated with that filesystem. On calling this function, Tcl will attach the filesystem to the list of known filesystems, and it will become fully functional immediately. Tcl does not check if the same filesystem is registered multiple times (and in general that is not a good thing to do). TCL_OK will be returned.

Tcl_FSUnregister は与えられたファイル系構造を既知のファイル系のリストから取除き､もし既知であれば TCL_OK を返す｡現在ファイル系が登録されていない場合は TCL_ERROR が返される｡ Tcl_FSUnregister removes the given filesystem structure from the list of known filesystems, if it is known, and returns TCL_OK. If the filesystem is not currently registered, TCL_ERROR is returned.

Tcl_FSData は与えられたファイル系が登録されていれば､それに結合した clientData を返す｡それ以外は NULL を返す｡ Tcl_FSData will return the clientData associated with the given filesystem, if that filesystem is registered. Otherwise it will return NULL.

Tcl_FSMountsChanged は Tcl's 核に変更された与えられたファイル系を載せる位置の設定を告げることに使用され､又､高速記憶されたファイル表現は最早正しくないことを告げる｡ Tcl_FSMountsChanged is used to inform the Tcl's core that the set of mount points for the given (already registered) filesystem have changed, and that cached file representations may therefore no longer be correct.

#### THE TCL_FILESYSTEM STRUCTURE

Tcl_Filesystem 構造は次の欄を含む: The Tcl_Filesystem structure contains the following fields:

    typedef struct Tcl_Filesystem {
        const char *typeName;
        int structureLength;
        Tcl_FSVersion version;
        Tcl_FSPathInFilesystemProc *pathInFilesystemProc;
        Tcl_FSDupInternalRepProc *dupInternalRepProc;
        Tcl_FSFreeInternalRepProc *freeInternalRepProc;
        Tcl_FSInternalToNormalizedProc *internalToNormalizedProc;
        Tcl_FSCreateInternalRepProc *createInternalRepProc;
        Tcl_FSNormalizePathProc *normalizePathProc;
        Tcl_FSFilesystemPathTypeProc *filesystemPathTypeProc;
        Tcl_FSFilesystemSeparatorProc *filesystemSeparatorProc;
        Tcl_FSStatProc *statProc;
        Tcl_FSAccessProc *accessProc;
        Tcl_FSOpenFileChannelProc *openFileChannelProc;
        Tcl_FSMatchInDirectoryProc *matchInDirectoryProc;
        Tcl_FSUtimeProc *utimeProc;
        Tcl_FSLinkProc *linkProc;
        Tcl_FSListVolumesProc *listVolumesProc;
        Tcl_FSFileAttrStringsProc *fileAttrStringsProc;
        Tcl_FSFileAttrsGetProc *fileAttrsGetProc;
        Tcl_FSFileAttrsSetProc *fileAttrsSetProc;
        Tcl_FSCreateDirectoryProc *createDirectoryProc;
        Tcl_FSRemoveDirectoryProc *removeDirectoryProc;
        Tcl_FSDeleteFileProc *deleteFileProc;
        Tcl_FSCopyFileProc *copyFileProc;
        Tcl_FSRenameFileProc *renameFileProc;
        Tcl_FSCopyDirectoryProc *copyDirectoryProc;
        Tcl_FSLstatProc *lstatProc;
        Tcl_FSLoadFileProc *loadFileProc;
        Tcl_FSGetCwdProc *getCwdProc;
        Tcl_FSChdirProc *chdirProc;
    } Tcl_Filesystem;

単純なデータ要素を含む最初の三つの欄を除き､全ての見出しは､活動に関連したファイル系の完全な範囲の遂行の為に､一般ファイル系層により呼出される函数の番地を含む｡ 　　　 Except for the first three fields in this structure which contain simple data elements, all entries contain addresses of functions called by the generic filesystem layer to perform the complete range of filesystem related actions.

この構造の多くの函数は三つの分野に分けられる: 基盤構造函数(殆どその全てが実装されなければならない)､操作函数(完全なファイル系が提供された場合実装されなければならない)､効率函数(それ程に効果的に為されたか､ファイル系によって要求された副作用を有するかの場合にのみ実装される必要がある; Tcl は頼ることができる程には効率的でない模擬である)｡重要な註意は､現在の版の Tcl は､大部分のこれらの後退は C.ではなく Tcl に初期化された命令を処理する為にのみ使われる｡之の意味は､ Tcl 内に file rename 命令が発行され､且つ適切なファイル系がその Tcl_FSRenameFileProc を実装していないと､Tcl の中核は他のファイル系函数の組合せに切替える(それは Tcl_FSCopyFileProc を使いそれに Tcl_FSDeleteFileProc が続く､もし Tcl_FSCopyFileProc が実装されていない場合は更に切替える)｡しかし､ Tcl_FSRenameFileProc 命令が C の水準で発行されると､この様な切替えは生じない｡これはファイル系の表の最後の４つの見出し(lstat, load, getcwd and chdir)を除いて成立し､例外では C の水準では切替が生じる｡ The many functions in this structure are broken down into three categories: infrastructure functions (almost all of which must be implemented), operational functions (which must be implemented if a complete filesystem is provided), and efficiency functions (which need only be implemented if they can be done so efficiently, or if they have side-effects which are required by the filesystem; Tcl has less efficient emulations it can fall back on). It is important to note that, in the current version of Tcl, most of these fallbacks are only used to handle commands initiated in Tcl, not in C. What this means is, that if a file rename command is issued in Tcl, and the relevant filesystem(s) do not implement their Tcl_FSRenameFileProc, Tcl's core will instead fallback on a combination of other filesystem functions (it will use Tcl_FSCopyFileProc followed by Tcl_FSDeleteFileProc, and if Tcl_FSCopyFileProc is not implemented there is a further fallback). However, if a Tcl_FSRenameFileProc command is issued at the C level, no such fallbacks occur. This is true except for the last four entries in the filesystem table (lstat, load, getcwd and chdir) for which fallbacks do in fact occur at the C level.

Tcl_Obj 形式内の経路を取るどの函数も UTF-8 形式の名前をとる｡ファイル系の基盤の API は効率的に運営するよう設計されており､他の固有の表現への UTF-8 経路の変換を高速域に記憶している｡ Any functions which take path names in Tcl_Obj form take those names in UTF-8 form. The filesystem infrastructure API is designed to support efficient, cached conversion of these UTF-8 paths to other native representations.

#### EXAMPLE FILESYSTEM DEFINITION

Tcl 内に実装されるファイル系活動を許容する “vfs” によって使われるファイル系調査表である｡ Here is the filesystem lookup table used by the “vfs” extension which allows filesystem actions to be implemented in Tcl.

    static Tcl_Filesystem vfsFilesystem = {
        "tclvfs",
        sizeof(Tcl_Filesystem),
        TCL_FILESYSTEM_VERSION_1,
        &VfsPathInFilesystem,
        &VfsDupInternalRep,
        &VfsFreeInternalRep,
        /* No internal to normalized, since we don't create
         * any pure 'internal' Tcl_Obj path representations */
        NULL,
        /* No create native rep function, since we don't use
         * it and don't choose to support uses of
         * Tcl_FSNewNativePath */
        NULL,
        /* Normalize path isn't needed - we assume paths only
         * have one representation */
        NULL,
        &VfsFilesystemPathType,
        &VfsFilesystemSeparator,
        &VfsStat,
        &VfsAccess,
        &VfsOpenFileChannel,
        &VfsMatchInDirectory,
        &VfsUtime,
        /* We choose not to support symbolic links inside our
         * VFS's */
        NULL,
        &VfsListVolumes,
        &VfsFileAttrStrings,
        &VfsFileAttrsGet,
        &VfsFileAttrsSet,
        &VfsCreateDirectory,
        &VfsRemoveDirectory,
        &VfsDeleteFile,
        /* No copy file; use the core fallback mechanism */
        NULL,
        /* No rename file; use the core fallback mechanism */
        NULL,
        /* No copy directory; use the core fallback mechanism */
        NULL,
        /* Core will use stat for lstat */
        NULL,
        /* No load; use the core fallback mechanism */
        NULL,
        /* We don't need a getcwd or chdir; the core's own
         * internal value is suitable */
        NULL,
        NULL
    };

### FILESYSTEM INFRASTRUCTURE

これ等の欄はファイル系構造に関する基本的情報と､ファイル系を供なう特定のファイル系に結合する為に使われる函数の番地とを含み､譬えばこのような表現の複写や解放の様な､経路表現の内部処理を扱う｡ 　　　 These fields contain basic information about the filesystem structure and addresses of functions which are used to associate a particular filesystem with a file path, and deal with the internal handling of path representations, for example copying and freeing such representations.

#### TYPENAME

型名欄は実装されたファイル系の型を指し示す零終端文字列を含む､譬えば “native”, “zip” か “vfs” ｡ The typeName field contains a null-terminated string that identifies the type of the filesystem implemented, e.g. “native”, “zip” or “vfs”.

#### STRUCTURE LENGTH

structureLength 欄は一般に sizeof(Tcl_Filesystem) として実装され､そこによって､将来の Tcl 改版で構造の寸法が変更された場合､容易に旧版との２進数での互換性が可能になる｡ 　　　 The structureLength field is generally implemented as sizeof(Tcl_Filesystem), and is there to allow easier binary backwards compatibility if the size of the structure changes in a future Tcl release.

#### VERSION

版versionの欄は TCL_FILESYSTEM_VERSION_1 に設定されるべきである｡ The version field should be set to TCL_FILESYSTEM_VERSION_1.

#### PATHINFILESYSTEMPROC

pathInFilesystemProc 欄は与えられた経路値がこのファイル系に属するか否かを定める為に呼出される函数の番地を含む｡ Tcl は残りの函数を､この函数が TCL_OK を返した経路を辿って呼ぶだけである｡もしその経路が属していない場合 -1 が返される(その他の返り値に関する Tcl の挙動は定義されていない)であろう｡もし TCL_OK が返される場合､追加指定の clientDataPtr 出力假引数は経路の内部的表現(ファイル系に固有の)を返す為に使われるかもしれない､経路は内部経路値に高速記憶され他のファイル系函数により効果的に取り出せる｡ Tcl はこの経路がこのファイル系に属する事実を順番に高速域に記憶する｡この様な高速域への記憶はファイル系構造が追加された時又は既知のファイル系の Tcl の内部リストが除かれた時には内容が不適切に放置される｡ 　　　 The pathInFilesystemProc field contains the address of a function which is called to determine whether a given path value belongs to this filesystem or not. Tcl will only call the rest of the filesystem functions with a path for which this function has returned TCL_OK. If the path does not belong, -1 should be returned (the behavior of Tcl for any other return value is not defined). If TCL_OK is returned, then the optional clientDataPtr output parameter can be used to return an internal (filesystem specific) representation of the path, which will be cached inside the path value, and may be retrieved efficiently by the other filesystem functions. Tcl will simultaneously cache the fact that this path belongs to this filesystem. Such caches are invalidated when filesystem structures are added or removed from Tcl's internal list of known filesystems.

    typedef int Tcl_FSPathInFilesystemProc(
            Tcl_Obj *pathPtr,
            ClientData *clientDataPtr);

#### DUPINTERNALREPPROC

この函数は経路の内部表現の複写を作り､ Tcl が経路値を複製する必要がある時に呼出される｡もし NULL なら Tcl はただ単に､後に再生成する必要があるかもしれない内部表現を複写しない｡ This function makes a copy of a path's internal representation, and is called when Tcl needs to duplicate a path value. If NULL, Tcl will simply not copy the internal representation, which may then need to be regenerated later.

    typedef ClientData Tcl_FSDupInternalRepProc(
            ClientData clientData);

#### FREEINTERNALREPPROC

内部表現を解放する｡もし内部表現を解放する必要がある場合は(即ち､内部表現が生成された時に､もしある記憶が割当てられた場合)､実装されなければならないが､そうでない場合は NULL.である｡ 　　　 Free the internal representation. This must be implemented if internal representations need freeing (i.e. if some memory is allocated when an internal representation is generated), but may otherwise be NULL.

    typedef void Tcl_FSFreeInternalRepProc(
            ClientData clientData);

#### INTERNALTONORMALIZEDPROC

内部表現から標準化された経路に変換する為の函数｡もしファイル系が文字列/経路表現を伴わない純粋な経路値を生成する場合に要求されるだけである｡返り値は文字列表現が標準化された経路であるTcl 値である｡ 　　　 Function to convert internal representation to a normalized path. Only required if the filesystem creates pure path values with no string/path representation. The return value is a Tcl value whose string representation is the normalized path.

    typedef Tcl_Obj *Tcl_FSInternalToNormalizedProc(
            ClientData clientData);

#### CREATEINTERNALREPPROC

経路値を取る函数であって､その為に内部表現を算出し､その固有の表現を値に保存する｡経路が内部表現を有さない場合は NULL になり得る､もしこのファイル系の為に Tcl_FSPathInFilesystemProc が経路に就いて､常に直ぐに内部表現を作成するならそれを受け付ける｡ 　　　 Function to take a path value, and calculate an internal representation for it, and store that native representation in the value. May be NULL if paths have no internal representation, or if the Tcl_FSPathInFilesystemProc for this filesystem always immediately creates an internal representation for paths it accepts.

    typedef ClientData Tcl_FSCreateInternalRepProc(
            Tcl_Obj *pathPtr);

#### NORMALIZEPATHPROC

経路を標準化する函数である｡同じ経路値に多数文字列表現を有し得る全てのファイル系に実装されるべきである｡ Tcl,内では､全ての “経路” は一つの唯一の “標準化された” 文字列表現を有しなければならない｡ ファイル系によって､その経路を参照する複数の非標準化文字列表現があり得る(譬えば､相対経路､大文字小文字を区別しないファイル系では異なる文字の大きさの経路､ “~” の様な､我が家ディレクトリーへの参照を含む経路､記号連結を含む経路､等)｡もし経路内の全く最後の要素が記号連結の場合､それはそれが指している値に変換すべきではない(しかしその場合も他の局面も唯一にすべきである)｡他の全ての経路要素は記号連結から変換すべきである｡この一つの例外は記号連結上の file delete, file rename, file copy 操作に就いての Tcl の意味論との整合による｡この函数は nextCheckpoint を伴って又は経路の初め(即ち､零)や､経路の末尾や､経路内のどれかの中途のファイル区切りから呼ばれるかもしれない｡経路内のどの他の任意の位置も指す事はない｡最後の３つの適正な場合､実装はファイル区切り迄を含む経路は既知であり標準化されることを仮定できる｡ 　　　 Function to normalize a path. Should be implemented for all filesystems which can have multiple string representations for the same path value. In Tcl, every “path” must have a single unique “normalized” string representation. Depending on the filesystem, there may be more than one unnormalized string representation which refers to that path (e.g. a relative path, a path with different character case if the filesystem is case insensitive, a path contain a reference to a home directory such as “~”, a path containing symbolic links, etc). If the very last component in the path is a symbolic link, it should not be converted into the value it points to (but its case or other aspects should be made unique). All other path components should be converted from symbolic links. This one exception is required to agree with Tcl's semantics with file delete, file rename, file copy operating on symbolic links. This function may be called with nextCheckpoint either at the beginning of the path (i.e. zero), at the end of the path, or at any intermediate file separator in the path. It will never point to any other arbitrary position in the path. In the last of the three valid cases, the implementation can assume that the path up to and including the file separator is known and normalized.

    typedef int Tcl_FSNormalizePathProc(
            Tcl_Interp *interp,
            Tcl_Obj *pathPtr,
            int nextCheckpoint);

### FILESYSTEM OPERATIONS

この構造の節の欄は基本的ファイル操作を遂行する為に呼出される函数の番地を含む｡完全に標準的な Tcl 命令揃いに使われることが予想されるファイル系が全て実装されている必要がある｡もし幾つかが実装されていない場合､ファイル系内部の経路情の操作の時に何かの Tcl 命令が失敗するかもしれない｡しかし､ある実現値内ではそれが望ましいかもしれない(譬えば､読取り専用ファイル系は最後の４つの函数を実装しないかも知れない､記号連結を運営しないファイル系は readlink 函数を実装する必要はない等､ Tcl 中核はファイル系にこの様に振舞うことを期待する)｡ 　　　 The fields in this section of the structure contain addresses of functions which are called to carry out the basic filesystem operations. A filesystem which expects to be used with the complete standard Tcl command set must implement all of these. If some of them are not implemented, then certain Tcl commands may fail when operating on paths within that filesystem. However, in some instances this may be desirable (for example, a read-only filesystem should not implement the last four functions, and a filesystem which does not support symbolic links need not implement the readlink function, etc. The Tcl core expects filesystems to behave in this way).

#### FILESYSTEMPATHTYPEPROC

このファイル系の経路の型を定める函数｡ファイル系の使用者に利用できる型の情報がない場合 NULL,にもなり得る｡ この “型” は情報としての目的にのみ使用され､返される Tcl_Obj の文字列表現として返される｡典型的な返り値は “networked”, “zip” or “ftp” であろう｡ Tcl_Obj 結果はファイル系によって所有され､もしそれに対する参照を保有したい場合､ Tcl はその値の参照計数を増加さする｡ 　　　 Function to determine the type of a path in this filesystem. May be NULL, in which case no type information will be available to users of the filesystem. The “type” is used only for informational purposes, and should be returned as the string representation of the Tcl_Obj which is returned. A typical return value might be “networked”, “zip” or “ftp”. The Tcl_Obj result is owned by the filesystem and so Tcl will increment the reference count of that value if it wishes to retain a reference to it.

    typedef Tcl_Obj *Tcl_FSFilesystemPathTypeProc(
            Tcl_Obj *pathPtr);

#### FILESYSTEMSEPARATORPROC

このファイル系の区切り文字を返す函数である｡この需要は､もしファイル系が標準文字列 “/” 以外の区切りを使用したい場合にのみ実装される｡他の用途では file separator 命令がそれを返す｡返される値は参照計数零の値である｡ 　　　 Function to return the separator character(s) for this filesystem. This need only be implemented if the filesystem wishes to use a different separator than the standard string “/”. Amongst other uses, it is returned by the file separator command. The return value should be a value with reference count of zero.

    typedef Tcl_Obj *Tcl_FSFilesystemSeparatorProc(
            Tcl_Obj *pathPtr);

#### STATPROC

Tcl_FSStat 呼出しを処理する函数｡多くの Tcl 水準の命令は(譬えば､ file atime, file isdirectory, file size, glob)厳密にそれに依存しているのでどの合理的ファイル系にも実装されていなければならない｡ 　　　 Function to process a Tcl_FSStat call. Must be implemented for any reasonable filesystem, since many Tcl level commands depend crucially upon it (e.g. file atime, file isdirectory, file size, glob).

    typedef int Tcl_FSStatProc(
            Tcl_Obj *pathPtr,
            Tcl_StatBuf *statPtr);

Tcl_FSStatProc は状態構造 statPtr を指定されたファイルに関する情報で満たす｡この情報を得る為のファイルを利用する権限は必要がないが､このファイルへ導く経路内の名前がついた全てのディレクトリーを捜索する権限が必要である｡状態構造は､装置､inode (Windowsでは常に 0 )､特権モード､ nlink (Windowsでは常に 1 )､使用者認識番号(Windowsでは常に 0 )､群認識番号(Windowsでは常に 0 )､根本の装置(Windowsでは装置に等しい)､寸法､最終利用時刻､最終修正時刻､最終媒体交換時刻を考慮した情報を含む｡ 　　　 The Tcl_FSStatProc fills the stat structure statPtr with information about the specified file. You do not need any access rights to the file to get this information but you need search rights to all directories named in the path leading to the file. The stat structure includes info regarding device, inode (always 0 on Windows), privilege mode, nlink (always 1 on Windows), user id (always 0 on Windows), group id (always 0 on Windows), rdev (same as device on Windows), size, last access time, last modification time, and last metadata change time.

もし､ pathPtr によって表現されるファイルが実在すると､ Tcl_FSStatProc は 0 を返す､又､状態構造はデータで満たされる｡それ以外は -1 が返され､状態情報は与えられない｡ 　　　　 If the file represented by pathPtr exists, the Tcl_FSStatProc returns 0 and the stat structure is filled with data. Otherwise, -1 is returned, and no stat info is given.

#### ACCESSPROC

Tcl_FSAccess 呼出しを処理する函数｡多くの Tcl 水準の命令は(譬えば､ file exists, file readable)厳密にそれに依存しているのでどの合理的ファイル系にも実装されていなければならない｡ 　　　 Function to process a Tcl_FSAccess call. Must be implemented for any reasonable filesystem, since many Tcl level commands depend crucially upon it (e.g. file exists, file readable).

    typedef int Tcl_FSAccessProc(
            Tcl_Obj *pathPtr,
            int mode);

Tcl_FSAccessProc は pathPtr 内に名前がある既存のファイル(又は､他のファイル系対象)に就いて処理系が読み書き検査を許容されているかを検査する｡もし経路名が記号連結を参照する場合､この記号連結により参照されているファイルの権限が検査される｡ 　　　　 The Tcl_FSAccessProc checks whether the process would be allowed to read, write or test for existence of the file (or other filesystem object) whose name is in pathPtr. If the pathname refers to a symbolic link, then the permissions of the file referred by this symbolic link should be tested.

成功すると(要求された全ての権限が保障された)零が返される｡不都合の場合(少なくとも､問合わされた権限の様式の一つのビットが否定されたか他の不都合が生じた)､-1 が返される｡ 　　　 On success (all requested permissions granted), zero is returned. On error (at least one bit in mode asked for a permission that is denied, or some other error occurred), -1 is returned.

#### OPENFILECHANNELPROC

Tcl_FSOpenFileChannel 呼出しを処理する函数｡ファイルを開けたり内容を利用するどの操作もそれを使おうとするので(譬えば､ open, encoding 及び多くの Tk 命令)どの合理的ファイル系にも実装されていなければならない｡ 　　　 Function to process a Tcl_FSOpenFileChannel call. Must be implemented for any reasonable filesystem, since any operations which require open or accessing a file's contents will use it (e.g. open, encoding, and many Tk commands).

    typedef Tcl_Channel Tcl_FSOpenFileChannelProc(
            Tcl_Interp *interp,
            Tcl_Obj *pathPtr,
            int mode,
            int permissions);

Tcl_FSOpenFileChannelProc は pathPtr によって指定されるファイルを開け､そのファイル上で入力と出力を遂行する為に使用する通信路処理子を返す｡この API は Unix 標準入出力外部函数の fopen 手続函数に准えたもにである｡全ての引数の構文と意味はファイルを開ける時の Tcl open 命令に与えられるものに似ていて､ mode 引数は POSIX 旗印 O_RDONLY, O_WRONLY, 等の組合せである｡もし通信路を開ける間に不都合が生じると､ Tcl_FSOpenFileChannelProc は NULL を返し､ POSIX 不都合符号を記録する､それは Tcl_GetErrno によって取戻すことができる｡更に､もし interp が非-NULL,の場合､Tcl_FSOpenFileChannelProc はどれかの不都合の後に不都合伝言文を interp の結果に残す｡ 　　　 The Tcl_FSOpenFileChannelProc opens a file specified by pathPtr and returns a channel handle that can be used to perform input and output on the file. This API is modeled after the fopen procedure of the Unix standard I/O library. The syntax and meaning of all arguments is similar to those given in the Tcl open command when opening a file, where the mode argument is a combination of the POSIX flags O_RDONLY, O_WRONLY, etc. If an error occurs while opening the channel, the Tcl_FSOpenFileChannelProc returns NULL and records a POSIX error code that can be retrieved with Tcl_GetErrno. In addition, if interp is non-NULL, the Tcl_FSOpenFileChannelProc leaves an error message in interp's result after any error.

新しく作成された通信路は Tcl_FSOpenFileChannelProc により供給された解釈実行機能内に登録されてはならない; その役目は Tcl_FSOpenFileChannel の呼出し側の責務である(もし必要なら)｡もし標準通信路 stdin, stdout or stderr の内の一つが事前に閉じている場合､新通信路を作成する活動は標準通信路に関する置換えとして代入する｡ 　　　 The newly created channel must not be registered in the supplied interpreter by a Tcl_FSOpenFileChannelProc; that task is up to the caller of Tcl_FSOpenFileChannel (if necessary). If one of the standard channels, stdin, stdout or stderr was previously closed, the act of creating the new channel also assigns it as a replacement for the standard channel.

#### MATCHINDIRECTORYPROC

Tcl_FSMatchInDirectory 呼出しを処理する函数｡もし､実装されていない場合､展開と再帰的複写の機能はファイル系に不足することになる(又､これは展開機能を内部的に使う encoding names の様な命令も衝撃を受けるであろ)｡ 　　　 Function to process a Tcl_FSMatchInDirectory call. If not implemented, then glob and recursive copy functionality will be lacking in the filesystem (and this may impact commands like encoding names which use glob functionality internally).

    typedef int Tcl_FSMatchInDirectoryProc(
            Tcl_Interp *interp,
            Tcl_Obj *resultPtr,
            Tcl_Obj *pathPtr,
            const char *pattern,
            Tcl_GlobTypeData *types);

函数は与えられた types 指定に従って与えられた紋様に合致する全てのファイルやディレクトリーを(又は､他のファイル系対象)返すべきである｡この函数が呼ばれる２つの方法がある｡もし pattern が NULL の場合､ pathPtr は全経路指定された一つのファイルやディレクトリーであって､実在性と型の正確性が検査される｡それ以外の場合､ pathPtr はディレクトリーであってその中から函数が正しい型を有するファイルやディレクトリーを捜索する｡どちらの場合も､ pathPtr は非-NULL且つ非空を仮定できる｡現在は pathPtr はファイル区切りを末尾に有するか否かを文書化していないので､符号命令は両方の可能性に柔軟であるべきである｡ The function should return all files or directories (or other filesystem objects) which match the given pattern and accord with the types specification given. There are two ways in which this function may be called. If pattern is NULL, then pathPtr is a full path specification of a single file or directory which should be checked for existence and correct type. Otherwise, pathPtr is a directory, the contents of which the function should search for files or directories which have the correct type. In either case, pathPtr can be assumed to be both non-NULL and non-empty. It is not currently documented whether pathPtr will have a file separator at its end of not, so code should be flexible to both possibilities.

返り値は､合致処理内で不都合が生じたかを指し示す標準 Tcl 結果である｡不都合伝言文は不都合伝言文が生成される必要がない場合の interp が NULL でない限り interp に置かれる; TCL_OK の結果では結果は与えられた resultPtr 値に追加される(それは適正な非共有の Tcl リストであると仮定できる)｡註意すべきは､もし合致しない場合単純に空リストになる; 不都合は､合致処理手順内で実際に生じたファイルかファイル系の問題の合図である｡ 　　　 The return value is a standard Tcl result indicating whether an error occurred in the matching process. Error messages are placed in interp, unless interp in NULL in which case no error message need be generated; on a TCL_OK result, results should be added to the resultPtr value given (which can be assumed to be a valid unshared Tcl list). The matches added to resultPtr should include any path prefix given in pathPtr (this usually means they will be absolute path specifications). Note that if no matches are found, that simply leads to an empty result; errors are only signaled for actual file or filesystem problems which may occur during the matching process.

types 假引数に渡される Tcl_GlobTypeData 構造は次の欄を含む: 　　　 The Tcl_GlobTypeData structure passed in the types parameter contains the following fields:

    typedef struct Tcl_GlobTypeData {
        /* Corresponds to bcdpfls as in 'find -t' */
        int type;
        /* Corresponds to file permissions */
        int perm;
        /* Acceptable mac type */
        Tcl_Obj *macType;
        /* Acceptable mac creator */
        Tcl_Obj *macCreator;
    } Tcl_GlobTypeData;

正しく処理する為に重要な､二つの特殊な場合があり､両方とも types が非-NULL の時である｡二つの場合は types->types & TCL_GLOB_TYPE_DIR or types->types & TCL_GLOB_TYPE_MOUNT が真値の時(又､特に､他の旗印が偽値の時)である｡第１の場合は､函数は含むディレクトリーを列挙しなければならない｡ Tcl は再起的な展開を実装する為にこれを使うので､ディレクトリーが正しく合致したファイル系の実装が至上命題である｡第２の場合は､ TCL_GLOB_TYPE_MOUNT を伴う､ファイル系は与えられた pathPtr 内部に置かれている装備用の位置を列挙しなければならない(この場合､ pathPtr は同じファイル系内部に置かれる必要はない - この函数が呼ばれる他の全ての場合と異なる)｡もし Tcl が一つのファイル系から他のものとの間の縫目のない変換を有するにはこの運営が至上命題である｡ 　　　　 There are two specific cases which it is important to handle correctly, both when types is non-NULL. The two cases are when types->types & TCL_GLOB_TYPE_DIR or types->types & TCL_GLOB_TYPE_MOUNT are true (and in particular when the other flags are false). In the first of these cases, the function must list the contained directories. Tcl uses this to implement recursive globbing, so it is critical that filesystems implement directory matching correctly. In the second of these cases, with TCL_GLOB_TYPE_MOUNT, the filesystem must list the mount points which lie within the given pathPtr (and in this case, pathPtr need not lie within the same filesystem - different to all other cases in which this function is called). Support for this is critical if Tcl is to have seamless transitions between from one filesystem to another.

#### UTIMEPROC

Tcl_FSUtime 呼出しを処理する函数｡ file mtime, file atime による時間の設定(読み出しではなく)と､file copy の 読み開け/書込み開け/複写　実装を許容することを要求する｡ Function to process a Tcl_FSUtime call. Required to allow setting (not reading) of times with file mtime, file atime and the open-r/open-w/fcopy implementation of file copy.

    typedef int Tcl_FSUtimeProc(
            Tcl_Obj *pathPtr,
            struct utimbuf *tval);

pathPtr により指定されたファイルの利用と修正時間は tval 構造内の値に変更されるべきである｡ The access and modification times of the file specified by pathPtr should be changed to the values given in the tval structure.

系 utime に従って､成功した場合の返り値は 0 不都合の場合は -1 になる｡ The return value should be 0 on success and -1 on an error, as with the system utime.

#### LINKPROC

Tcl_FSLink 呼出しを処理する函数｡ファイル系が連結を運営している場合のみ実装すべきであり､他は NULL とすべきである｡ Function to process a Tcl_FSLink call. Should be implemented only if the filesystem supports links, and may otherwise be NULL.

    typedef Tcl_Obj *Tcl_FSLinkProc(
            Tcl_Obj *linkNamePtr,
            Tcl_Obj *toPtr,
            int linkAction);

もし toPtr が NULL の場合､函数は連結の内容を読む事を求められる｡結果は linkNamePtr によって与えられる連結の内容を指定する Tcl_Obj か､連結が読めない時は NULL である｡結果は呼出し側が所有する(従って､返される前に参照計数が増加されている)｡どの呼出し側も､最早必要でなくなった時にこの結果に Tcl_DecrRefCount を呼出すべきである｡もし toPtr が NULL の場合､函数は連結を作成しようと試みる｡この場合､結果は呼出し側に所有されない(即ち､参照計数の操作はどの末尾でも要求されない)｡ linkAction 旗印の正しい相互作用に就いては説明書の Tcl_FSLink を参照されたい｡ 　　　 If toPtr is NULL, the function is being asked to read the contents of a link. The result is a Tcl_Obj specifying the contents of the link given by linkNamePtr, or NULL if the link could not be read. The result is owned by the caller (and should therefore have its ref count incremented before being returned). Any callers should call Tcl_DecrRefCount on this result when it is no longer needed. If toPtr is not NULL, the function should attempt to create a link. The result in this case should be toPtr if the link was successful and NULL otherwise. In this case the result is not owned by the caller (i.e. no reference count manipulations on either end are needed). See the documentation for Tcl_FSLink for the correct interpretation of the linkAction flags.

#### LISTVOLUMESPROC

このファイル系によって追加されたどのファイル系の巻も列挙する函数｡もしファイ付け意がファイル系の先頭に巻を加える場合にのみ実装されるべき､そこで file volumes によって返すことができる｡ 　　　 Function to list any filesystem volumes added by this filesystem. Should be implemented only if the filesystem adds volumes at the head of the filesystem, so that they can be returned by file volumes.

    typedef Tcl_Obj *Tcl_FSListVolumesProc(void);

結果はファイル系によって追加された巻のリストであるが､巻が提供されない場合は NULL (又は空リスト)である｡結果の値はファイル系によって所有されると看做されるが(Tcl 中核によらない)､ Tcl の為に参照計数が与えられるべきである｡ Tcl はリストの内容を使い参照計数を減ずる｡これはファイル系に実際に巻の “大域リスト” を保有したいか否かの選択を許容する(否の場合､その都度リストを作成し参照計数 1 で Tcl に渡し､リストの事は忘れる､是の場合､単に大域リストの参照計数を増加し Tcl に渡す､それは内用を複写し､計数を減じそこにあった場所に戻す)｡ The result should be a list of volumes added by this filesystem, or NULL (or an empty list) if no volumes are provided. The result value is considered to be owned by the filesystem (not by Tcl's core), but should be given a reference count for Tcl. Tcl will use the contents of the list and then decrement that reference count. This allows filesystems to choose whether they actually want to retain a “global list” of volumes or not (if not, they generate the list on the fly and pass it to Tcl with a reference count of 1 and then forget about the list, if yes, then they simply increment the reference count of their global list and pass it to Tcl which will copy the contents and then decrement the count back to where it was).

従って Tcl は､返り値からこの手続函数が読出し専用と看做す｡ 　　　 Therefore, Tcl considers return values from this proc to be read-only.

#### FILEATTRSTRINGSPROC

このファイル系に適する全ての属性の文字列を列挙する函数｡もし実装されない場合､ファイル系は file attributes 命令を運営しなくなる｡これはファイル系に任意の追加的情報を付加することを許容する｡もし実装されない場合､ get と set 手段を実装する必要はない｡ 　　　 Function to list all attribute strings which are valid for this filesystem. If not implemented the filesystem will not support the file attributes command. This allows arbitrary additional information to be attached to files in the filesystem. If it is not implemented, there is no need to implement the get and set methods.

    typedef const char *const *Tcl_FSFileAttrStringsProc(
            Tcl_Obj *pathPtr,
            Tcl_Obj **objPtrRef);

呼出された函数は､文字列の配列を返すか､代りに NULL を返し Tcl リストを与えられた objPtrRef の中に置くかする｡ Tcl はそのリストを取り､最初にそれを使う前にその参照計数を減ずる｡使用の終了にあたり､ Tcl はその参照計数を減ずる｡そこで､もし終った時に Tcl によってリストは遺棄されるべきであり､参照計数は零を有するべきであり､もしリストが遺棄されない場合､ファイル系は少なくとも１の参照計数を返すことを確実にする｡ 　　　 The called function may either return an array of strings, or may instead return NULL and place a Tcl list into the given objPtrRef. Tcl will take that list and first increment its reference count before using it. On completion of that use, Tcl will decrement its reference count. Hence if the list should be disposed of by Tcl when done, it should have a reference count of zero, and if the list should not be disposed of, the filesystem should ensure it returns a value with a reference count of at least one.

#### FILEATTRSGETPROC

Tcl_FSFileAttrsGet 呼出しを処理する函数､ file attributes によって使われる｡ Function to process a Tcl_FSFileAttrsGet call, used by file attributes.

    typedef int Tcl_FSFileAttrsGetProc(
            Tcl_Interp *interp,
            int index,
            Tcl_Obj *pathPtr,
            Tcl_Obj **objPtrRef);

標準 Tcl 返り符号を返す｡取返された属性値は Tcl_FSFileAttrStringsProc により返されたリストの index 番目の要素に相当し､ objPtrRef 内に置かれた Tcl_Obj であり(もし TCL_OK が返された場合)､参照計数零を有することが多い｡どちらの方法でも､それを何処かに保存するか(譬えば､ Tcl 結果)､その適正な解放を確かにする為に参照計数を増加/減少するか､しなければならない｡ 　　　 Returns a standard Tcl return code. The attribute value retrieved, which corresponds to the index'th element in the list returned by the Tcl_FSFileAttrStringsProc, is a Tcl_Obj placed in objPtrRef (if TCL_OK was returned) and is likely to have a reference count of zero. Either way we must either store it somewhere (e.g. the Tcl result), or Incr/Decr its reference count to ensure it is properly freed.

#### FILEATTRSSETPROC

Tcl_FSFileAttrsSet 呼出しを処理する函数､ file attributes によって使われる｡もしそのファイル系が読出し専用であると､実装する必要はない｡ 　　　 Function to process a Tcl_FSFileAttrsSet call, used by file attributes. If the filesystem is read-only, there is no need to implement this.

    typedef int Tcl_FSFileAttrsSetProc(
            Tcl_Interp *interp,
            int index,
            Tcl_Obj *pathPtr,
            Tcl_Obj *objPtr);

Tcl_FSFileAttrStringsProc により返されたリストの index 番目の要素の属性値は､与えられた objPtr に設定されるべきである｡ 　　　 The attribute value of the index'th element in the list returned by the Tcl_FSFileAttrStringsProc should be set to the objPtr given.

#### CREATEDIRECTORYPROC

Tcl_FSCreateDirectory 呼出しを処理する函数｡もしそのファイル系が読出し専用でない限り､実装すべきである｡ Function to process a Tcl_FSCreateDirectory call. Should be implemented unless the FS is read-only.

    typedef int Tcl_FSCreateDirectoryProc(
            Tcl_Obj *pathPtr);

返り値は標準 Tcl 返り結果であり､不都合が処理中に生じたか否かを指し示す｡もし成功であると､新しいディレクトリーが pathPtr に指定された局所内のファイル系に追加される｡ 　　　 The return value is a standard Tcl result indicating whether an error occurred in the process. If successful, a new directory should have been added to the filesystem in the location specified by pathPtr.

#### REMOVEDIRECTORYPROC

Tcl_FSRemoveDirectory 呼出しを処理する函数｡もしそのファイル系が読出し専用でない限り､実装すべきである｡ Function to process a Tcl_FSRemoveDirectory call. Should be implemented unless the FS is read-only.

    typedef int Tcl_FSRemoveDirectoryProc(
            Tcl_Obj *pathPtr,
            int recursive,
            Tcl_Obj **errorPtr);

返り値は不都合が処理中に生じたか否かを指し示す標準 Tcl 返り結果である｡もし成功であると､ pathPtr に指定されたディレクトリーがファイル系から削除される｡もし recursive 旗印が与えられると､非空のディレクトリーが不都合なしに削除される｡この旗印が与えられない場合､且つディレクトリーが非空であると POSIX “EEXIST” 不都合が発信される｡もし不都合が生じると､不都合を惹き起こしたファイルかディレクトリーの名前が errorPtr 内に置かれる｡ The return value is a standard Tcl result indicating whether an error occurred in the process. If successful, the directory specified by pathPtr should have been removed from the filesystem. If the recursive flag is given, then a non-empty directory should be deleted without error. If this flag is not given, then and the directory is non-empty a POSIX “EEXIST” error should be signaled. If an error does occur, the name of the file or directory which caused the error should be placed in errorPtr.

#### DELETEFILEPROC

Tcl_FSDeleteFile 呼出しを処理する函数｡もしそのファイル系が読出し専用でない限り､実装すべきである｡ Function to process a Tcl_FSDeleteFile call. Should be implemented unless the FS is read-only.

    typedef int Tcl_FSDeleteFileProc(
            Tcl_Obj *pathPtr);

返り値は不都合が処理中に生じたか否かを指し示す標準 Tcl 返り結果である｡もし成功であると､ pathPtr に指定されたファイルがファイル系から削除される｡註意すべきは､もしファイル系が記号連結を運営している場合､ Tcl は常にこの函数を呼出し､それを削除する必要がある時に Tcl_FSRemoveDirectoryProc を呼ばない(縦えそれがディレクトリーへの記号連結であっても)｡ 　　　 The return value is a standard Tcl result indicating whether an error occurred in the process. If successful, the file specified by pathPtr should have been removed from the filesystem. Note that, if the filesystem supports symbolic links, Tcl will always call this function and not Tcl_FSRemoveDirectoryProc when needed to delete them (even if they are symbolic links to directories).

### FILESYSTEM EFFICIENCY

これ等の函数はあるOSでは実装する必要がない､理由は核は再生実装が利用できるから｡遺棄の重要性欄が NULL のものは個別の記述を参照されたい｡ 　　　 These functions need not be implemented for a particular filesystem because the core has a fallback implementation available. See each individual description for the consequences of leaving the field NULL.

#### LSTATPROC

Tcl_FSLstat 呼出しを処理する函数である｡もしこれを実装してない場合､ Tcl は上で定義された statProc を代りに使おうとする｡したがって､ファイル系が stat と lstat 呼出しの間を区別できる場合にのみ実装する必要がある｡ 　　 Function to process a Tcl_FSLstat call. If not implemented, Tcl will attempt to use the statProc defined above instead. Therefore it need only be implemented if a filesystem can differentiate between stat and lstat calls.

    typedef int Tcl_FSLstatProc(
            Tcl_Obj *pathPtr,
            Tcl_StatBuf *statPtr);

この函数の挙動は上で定義した Tcl_FSStatProc と非常によく似ている､違いは､もしそれを記号連結に適用した場合､それは連結に関する情報を返し､目的ファイルではない｡ 　　　 The behavior of this function is very similar to that of the Tcl_FSStatProc defined above, except that if it is applied to a symbolic link, it returns information about the link, not about the target file.

#### COPYFILEPROC

Tcl_FSCopyFile 呼出しを処理する函数である｡もしこれを実装してない場合､ Tcl は open-r と open-w と fcopy を複写の仕組みとすることに戻る｡したがって､ファイル系がこの活動をより効果的に遂行できるばあいにのみ実装する必要がある｡ 　　　　 Function to process a Tcl_FSCopyFile call. If not implemented Tcl will fall back on open-r, open-w and fcopy as a copying mechanism. Therefore it need only be implemented if the filesystem can perform that action more efficiently.

    typedef int Tcl_FSCopyFileProc(
            Tcl_Obj *srcPathPtr,
            Tcl_Obj *destPathPtr);

返り値は標準 Tcl 結果であり､複写処理内で不都合が生じたか否かの指示を含む｡註意すべきは､ destPathPtr はファイルの名前であり､それは srcPathPtr の複写になる｡それはそこに srcPathPtr が複写できるディレクトリーの名前にはならない(即ち､函数は Tcl 水準の file copy 副命令より可也単純である)｡註意すべきは､もしファイル系が記号連結を運営している場合､ Tcl は複写する必要がある時に､常にこの函数を呼び､ copyDirectoryProc を呼ばない(縦えそれがディレクトリーへの記号連結であっても)｡最後に､もしファイル系が file copy 動作を運営できないと定め場合､ Tcl_SetErrno(EXDEV) を呼び､非-TCL_OK を返す結果は､ Tcl にその標準緊急仕組みを使うことを伝える｡ 　　　 The return value is a standard Tcl result indicating whether an error occurred in the copying process. Note that, destPathPtr is the name of the file which should become the copy of srcPathPtr. It is never the name of a directory into which srcPathPtr could be copied (i.e. the function is much simpler than the Tcl level file copy subcommand). Note that, if the filesystem supports symbolic links, Tcl will always call this function and not copyDirectoryProc when needed to copy them (even if they are symbolic links to directories). Finally, if the filesystem determines it cannot support the file copy action, calling Tcl_SetErrno(EXDEV) and returning a non-TCL_OK result will tell Tcl to use its standard fallback mechanisms.

#### RENAMEFILEPROC

Tcl_FSRenameFile 呼出しを処理する函数である｡もしこれを実装してない場合､ Tcl は複写と削除の仕組みとすることに戻る｡したがって､ファイル系がこの活動をより効果的に遂行できるばあいにのみ実装する必要がある｡ 　　　 Function to process a Tcl_FSRenameFile call. If not implemented, Tcl will fall back on a copy and delete mechanism. Therefore it need only be implemented if the filesystem can perform that action more efficiently.

    typedef int Tcl_FSRenameFileProc(
            Tcl_Obj *srcPathPtr,
            Tcl_Obj *destPathPtr);

返り値は標準 Tcl 結果であり､名前変更処理で不都合が生じたか否かを指し示す｡もしファイル系が file rename 動作を運営できないと定めた場合､ Tcl_SetErrno(EXDEV) を呼び､非-TCL_OK を返す結果は､ Tcl にその標準緊急仕組みを使うことを伝える｡ The return value is a standard Tcl result indicating whether an error occurred in the renaming process. If the filesystem determines it cannot support the file rename action, calling Tcl_SetErrno(EXDEV) and returning a non-TCL_OK result will tell Tcl to use its standard fallback mechanisms.

#### COPYDIRECTORYPROC

Tcl_FSCopyDirectory 呼出しを処理する函数である｡もしこれを実装してない場合､ Tcl は再帰的 file mkdir, file copy の仕組みとすることに戻る｡したがって､ファイル系がこの活動をより効果的に遂行できる場合にのみ実装する必要がある｡ 　　　 Function to process a Tcl_FSCopyDirectory call. If not implemented, Tcl will fall back on a recursive file mkdir, file copy mechanism. Therefore it need only be implemented if the filesystem can perform that action more efficiently.

    typedef int Tcl_FSCopyDirectoryProc(
            Tcl_Obj *srcPathPtr,
            Tcl_Obj *destPathPtr,
            Tcl_Obj **errorPtr);

返り値は標準 Tcl 結果であり､複写処理で不都合が生じたか否かを指し示す｡もし不都合が生じた場合､不都合を惹き起こしたファイル又はディレクトリーは errorPtr に置かれる｡注意すべきは､ destPathPtr はディレクトリーの名前であって srcPathPtr の鏡像影像になる｡それはそこに srcPathPtr が複写できるディレクトリーの名前にはならない(即ち､函数は Tcl 水準の file copy 副命令より可也単純である)｡最後にもしファイル系がディレクトリー複写動作を運営できないと定め場合､ Tcl_SetErrno(EXDEV) を呼び､非-TCL_OK を返す結果は､ Tcl にその標準緊急仕組みを使うことを伝える｡ 　　　 The return value is a standard Tcl result indicating whether an error occurred in the copying process. If an error does occur, the name of the file or directory which caused the error should be placed in errorPtr. Note that, destPathPtr is the name of the directory-name which should become the mirror-image of srcPathPtr. It is not the name of a directory into which srcPathPtr should be copied (i.e. the function is much simpler than the Tcl level file copy subcommand). Finally, if the filesystem determines it cannot support the directory copy action, calling Tcl_SetErrno(EXDEV) and returning a non-TCL_OK result will tell Tcl to use its standard fallback mechanisms.

#### LOADFILEPROC

Tcl_FSLoadFile 呼出しを処理する函数である｡もしこれを実装してない場合､ Tcl は固有臨時の複写が Tcl_FSLoadFile に続き臨時複写上になる｡したがって､もしファイル系が符号命令を直接積込みできる場合のみ実装する必要がある､又は､単純にこのファイル系で全く積込み機能を不可能にする TCL_ERROR を返すために実装されることができる｡ 　　　 Function to process a Tcl_FSLoadFile call. If not implemented, Tcl will fall back on a copy to native-temp followed by a Tcl_FSLoadFile on that temporary copy. Therefore it need only be implemented if the filesystem can load code directly, or it can be implemented simply to return TCL_ERROR to disable load functionality in this filesystem entirely.

    typedef int Tcl_FSLoadFileProc(
            Tcl_Interp *interp,
            Tcl_Obj *pathPtr,
            Tcl_LoadHandle *handlePtr,
            Tcl_FSUnloadFileProc *unloadProcPtr);

標準 Tcl 完成符号を返す｡もし不都合が生じた時は､不都合伝言文を解釈実行系 interp の結果に残す｡函数は動的に二進符号ファイルを記憶域に積込む｡成功裏に積込みされると､ handlePtr に動的に積込みされたファイルの為の字句が満たされ､ unloadProcPtr に手続函数の番地が満たされる｡ Tcl がファイルの積込み解除を必要とする時､假引数として Tcl_LoadHandle を与えられ積込み解除手続函数が呼出される｡譬えば､固有のファイル系に就いて､返された Tcl_LoadHandle は現在の字句であって､新しい符号命令内で函数を利用する為の個人的 TclpFindSymbol ないで使用できる｡それぞれのファイル系は要求されるように Tcl_LoadHandle を定義する事は自由である｡最後にもしファイル系がディレクトリー複写動作を運営できないと定めた場合､ Tcl_SetErrno(EXDEV) を呼び､非-TCL_OK を返す結果は､ Tcl にその標準緊急仕組みを使うことを伝える｡ 　　　 Returns a standard Tcl completion code. If an error occurs, an error message is left in the interp's result. The function dynamically loads a binary code file into memory. On a successful load, the handlePtr should be filled with a token for the dynamically loaded file, and the unloadProcPtr should be filled in with the address of a procedure. The unload procedure will be called with the given Tcl_LoadHandle as its only parameter when Tcl needs to unload the file. For example, for the native filesystem, the Tcl_LoadHandle returned is currently a token which can be used in the private TclpFindSymbol to access functions in the new code. Each filesystem is free to define the Tcl_LoadHandle as it requires. Finally, if the filesystem determines it cannot support the file load action, calling Tcl_SetErrno(EXDEV) and returning a non-TCL_OK result will tell Tcl to use its standard fallback mechanisms.

#### UNLOADFILEPROC

以前に成功裏に積込んだファイルを積込み解除する函数である｡もし積込みが実装されている場合､これは実装するべきである｡もし何かの浄化が要求される場合｡ 　　 Function to unload a previously successfully loaded file. If load was implemented, then this should also be implemented, if there is any cleanup action required.

    typedef void Tcl_FSUnloadFileProc(
            Tcl_LoadHandle loadHandle);

#### GETCWDPROC

Tcl_FSGetCwd 呼出しを処理する函数である｡大部分のファイル系はこれを実装する必要はない｡通常一度だけ呼出される､もし getcwd が chdir より前に呼ばれた場合｡ NULL かもしれいない｡ 　　 Function to process a Tcl_FSGetCwd call. Most filesystems need not implement this. It will usually only be called once, if getcwd is called before chdir. May be NULL.

    typedef Tcl_Obj *Tcl_FSGetCwdProc(
            Tcl_Interp *interp);

もしファイル系が現在の動作ディレクトリーの固有命名を運営している場合(それはＴｃｌとは独立に変化するかもしれない)､この函数はその cwd を結果として返すか､現在のディレクトリーが定められない場合はNULL を返す(譬えば､使用者は cwd ディレクトリー上の適当な権限を有していない)｡もし NULL が返されると､不都合伝言文が解釈実行機能 interp の結果内に残される｡ 　　 If the filesystem supports a native notion of a current working directory (which might perhaps change independent of Tcl), this function should return that cwd as the result, or NULL if the current directory could not be determined (e.g. the user does not have appropriate permissions on the cwd directory). If NULL is returned, an error message is left in the interp's result.

#### CHDIRPROC

Tcl_FSChdir 呼出しを処理する函数である｡もしファイル系がこれを実装してない場合､ディレクトリー利用検査を並べて偽装する｡そうでない場合､仮想ファイル系は､そのファイル系内の利用可能なディレクトリーに就いて､ pathPtr が適正かに､有効に反応する為だけに必要である｡系は結果を記憶する必要はない､理由は Tcl_FSGetCwd の使用により自動的に記憶されるから｡実ファイル系は正しい動作を実行するべきである(即ち､正しい chdir API系呼出し)｡ 　　 Function to process a Tcl_FSChdir call. If filesystems do not implement this, it will be emulated by a series of directory access checks. Otherwise, virtual filesystems which do implement it need only respond with a positive return result if the pathPtr is a valid, accessible directory in their filesystem. They need not remember the result, since that will be automatically remembered for use by Tcl_FSGetCwd. Real filesystems should carry out the correct action (i.e. call the correct system chdir API).

    typedef int Tcl_FSChdirProc(
            Tcl_Obj *pathPtr);

Tcl_FSChdirProc は応用譜の現在の実行ディレクトリーから pathPtr 内に指定された値に変更する｡不都合な場合､函数は -1 ､成功すると 0 を返す｡ 　　　 The Tcl_FSChdirProc changes the applications current working directory to the value specified in pathPtr. The function returns -1 on error or 0 on success.

### SEE ALSO

cd, file, filename, load, open, pwd, source, unload

### KEYWORDS

stat, access, filesystem, vfs, virtual filesystem
Copyright © 2001 Vincent Darley
Copyright © 2008-2010 Donal K. Fellows