トップ 一覧 検索 ヘルプ RSS ログイン

C/C++ Sync Suite Companion601/6の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{div_begin}}
[[← 5 章に戻る|C/C++ Sync Suite Companion601/5]] [[↑トップへ|C/C++ Sync Suite Companion601]] [[7 章に進む →|C/C++ Sync Suite Companion601/7]]
{{div_end}}

{{div_begin style="margin-bottom:-10px"}}
!!!6 拡張テクノロジの使用
{{div_end}}

{{div_begin "style='position:absolute;right:0px;font-size:70%;margin-right:15px;margin-top:15px;width:250px;'"}}
*{{goto Expansion Support,拡張サポート}}
**{{goto Primary vs. Secondary Storage,主記憶装置 対 補助記憶装置}}
**{{goto Expansion Slot,拡張スロット}}
**{{goto Universal Connector,ユニバーサル コネクタ}}
*{{goto Architectural Overview,アーキテクチャの概要}}
**{{goto Slot Drivers,スロット ドライバ}}
**{{goto File Systems,ファイル システム}}
**{{goto VFS Manager,VFS マネージャ}}
**{{goto Expansion Manager,拡張マネージャ}}
*{{goto Standard Directories,標準ディレクトリ}}
*{{goto Card Insertion and Removal,カードの挿入と取出}}
*{{goto Checking for Expansion Cards,拡張カードのチェック}}
**{{goto Verifying Handheld Compatibility,ハンドヘルド互換性の検証}}
**{{goto Checking for Mounted Volumes,マウントされたボリュームのチェック}}
**{{goto Enumerating Slots,スロットの列挙}}
**{{goto Determining a Card's Capabilities,カードの能力の決定}}
*{{goto Volume Operations,ボリューム操作}}
**{{goto Hidden Volumes,隠されたボリューム}}
**{{goto Matching Volumes to Slots,ボリュームのスロットへの一致}}
**{{goto Naming Volumes,ボリュームのネーミング}}
*{{goto File Operations,ファイル操作}}
**{{goto Common File Operations,共通ファイル操作}}
**{{goto Naming Files,ファイルのネーミング}}
**{{goto Working with Palm OS Databases,Palm OS データベースに対する処理}}
*{{goto Directory Operations,ディレクトリ操作}}
**{{goto Directory Paths,ディレクトリ パス}}
**{{goto Common Direcotry Operations,共通ディレクトリ操作}}
**{{goto Enumeration the Files in a Direcotry,ディレクトリ内のファイルの列挙}}
**{{goto Determining the Default Directory for a Particular File Type,ある特定のファイル タイプのためのデフォルト ディレクトリの決定}}
**{{goto Default Directories Registered at Initialization,初期化時に登録されるデフォルトのディレクトリ}}
*{{goto Custom Calls,カスタム呼び出し}}
**{{goto Custom I/O,カスタム I/O}}
*{{goto Debugging,デバッグ}}
*{{goto Summary of Expansion and VFS Managers,拡張マネージャと VFS マネージャの要約}}
{{div_end}}

{{div_begin "style='position:relative;padding:0px;padding-right:5px;padding-left:10px;margin-right:250px;margin-top:20px;width:auto;border-right-style:dotted;border-right-width:2px;border-right-color:silver;'"}}
この章では、拡張マネージャと仮想ファイルシステム(VFS)マネージャを使ってデスクトップからハンドヘルドの拡張カードとアド-オン デバイス対してどのように処理を行うのかについて説明します。この章は以下の節に分かれています:

*{{goto Expansion Support,拡張サポート}}
*{{goto Architectural Overview,アーキテクチャの概要}}
*{{goto Standard Directories,標準ディレクトリ}}
*{{goto Card Insertion and Removal,カードの挿入と取出}}
*{{goto Checking for Expansion Cards,拡張カードのためのチェック}}
*{{goto Volume Operations,ボリューム操作}}
*{{goto File Operations,ファイル操作}}
*{{goto Directory Operations,ディレクトリ操作}}
*{{goto Custom Calls,カスタム呼び出し}}
*{{goto Debugging,デバッグ}}
*{{goto Summary of Expansion and VFS Managers,拡張マネージャと VFS マネージャの要約}}


!!{{anchor Expansion Support}}拡張サポート {{goto top,^TOP^}}

Palm OS 4.0 からは、オプションのシステム拡張のセットが標準メカニズム - それにより、Palm OS アプリケーション、デスクトップ アプリケーション、コンジットはさまざまな Palm ハンドヘルドの拡張能力の利点を利用できます - を提供します。この能力はメモリとハンドヘルドの I/O を増やすだけでなく、他の Palm ハンドヘルドや Palm OS 以外の OS を実行しているデバイスとのデータの交換を容易にします。これらの他のデバイスには、デジタル カメラ、デジタル オーディオ プレイヤ、デスクトップ コンピュータ、ラップトップ コンピュータなどが含まれます。

この節は以下の内容をカバーします:

*{{goto Primary vs. Secondary Storage,主記憶装置 対 補助記憶装置}}
*{{goto Expansion Slot,拡張スロット}}
*{{goto Universal Connector,ユニバーサル コネクタ}}


!{{anchor Primary vs. Secondary Storage}}主記憶装置 対 補助記憶装置 {{goto top,^TOP^}}

すべての Palm ハンドヘルドは'''主記憶装置''' - 直接アクセス可能なメモリで、長期間の記憶と一時的な記憶の両方に使用されます - を持ちます。これは、不揮発のユーザ データとアプリケーションを保持するのに使用されるストレージ RAM と、一時割り当てを行うための作業領域として使用されるダイナミック RAM を含みます。

たいていのハンドヘルドでは、主記憶装置全体がハンドヘルド自体の内部にあります。しかしながら、Palm OS メモリ アーキテクチャはこのようにハンドヘルドを制限してはいません; ハンドヘルドは追加のストレージ RAM を受け入れるように設計することができます。Handspring によって開発されたいくつかの製品はそのように機能します; Springboard スロットに挿し込まれるメモリ モジュールは完全なアクセスが可能で、追加のストレージ RAM として Palm OS アプリケーションに表示されます。

デスクトップ、コンジットから主記憶 RAM にアクセスするには、HotSync 実施中に同期マネージャ API 呼び出しを行います([[第 4 章 「クラシック同期マネージャ API の使用」|C/C++ Sync Suite Companion601/4]] を参照してください)。

対照的に'''補助記憶装置'''は主にアド-オン不揮発性記憶装置となるように設計されています。ここの実装への制限はありませんが、たいていの補助記憶装置メディアは:

*望むときに拡張スロットに挿入、取り外しできます。
*セキュア デジタル(SD)、MultiMediaCard(MMC)、CompactFlash、Sony の Memory Stick、その他のサード-パーティ標準に基づきます。
*1 度にデータに 1 ビット、バイト、ブロックでアクセスするシリアル インターフェイスを提供します。

コンジットは HotSync 実施中に主記憶装置に同期マネージャを通してアクセスします。しかしながら、コンジットは補助記憶装置にアクセスするために拡張マネージャと VFS マネージャを使用します。これらはできる限り広い範囲のシリアル拡張アーキテクチャをサポートするように設計されています。

デスクトップ アプリケーションやインストーラは常にインストール援助機能を使用してアプリケーションとデータベースをキューに追加して、次の HotSync 実施中にインストール コンジットがそれらをハンドヘルドの主記憶装置にインストールするようにしてきました。Palm OS バージョン 4.0 のプラットフォームでは、デスクトップ アプリケーションやインストーラはさらにインストール援助機能を使用してファイルをキューに追加して、インストール コンジットがそのファイルをデスクトップから拡張カードの補助記憶装置にコピーするようにすることもできます。同様に、ユーザ データ API は、デスクトップ アプリケーションとインストーラがデスクトップ上のハンドヘルド ユーザについての情報にアクセスすることを可能にします; さらに、いまやそれらはユーザのハンドヘルド上の拡張スロットについての情報にもアクセスすることができます。

インストール援助機能とユーザ データ API についての更なる情報は、{{goto Using the Install Aide API,「インストール援助機能 API の使用」|C/C++ Sync Suite Companion601/9-1}} と {{goto Using the User Data API,「ユーザ データ API の使用」|C/C++ Sync Suite Companion601/9-2}} を参照してください。


!{{anchor Expansion Slot}}拡張スロット {{goto top,^TOP^}}

多くの Palm ハンドヘルドで見つかる拡張スロットは製造業者次第でさまざまです。あるものは SD と MMC カードを受け付けるかもしれませんし、他のものは Memory Stick や CompactFlash を受け付けるかもしれません。ハンドヘルドが持つことができる拡張スロットの数には制限が無いことに注意してください。

使用される拡張テクノロジ次第で、与えられたハンドヘルドで使用可能な拡張カードはさまざまです。

*記憶カードは補助記憶装置を提供し、追加のアプリケーションやデータを保持したり、バックアップ メカニズムとしてのインスタンスのためといったある特定の目的のために使用することができます。
*ROM カードは専用のアプリケーションとデータを保持します。
*I/O カードはハンドヘルドの I/O 能力を拡張します。例えば、モデムは有線通信を提供できますし、Bluetooth トランシーバは無線通信を追加できます。
*"Combo"(「複合」)カードは I/O 能力と共に追加のストレージまたは ROM の両方を提供します。

!{{anchor Universal Connector}}ユニバーサル コネクタ {{goto top,^TOP^}}

より新しい Palm ハンドヘルドのいくつかは、ハンドヘルドを HotSync クレードルに接続させるユニバーサル コネクタを装備しているかもしれません。このコネクタは、ハンドヘルドをスナップ-オン I/O デバイスに接続させることにも使用することができます。このコネクタ専用の特別なスロット ドライバは、コネクタのシリアル部分(訳者: 原文は serial portion だが、serial port(シリアル ポート)の間違いでは?)を使ってハンドヘルドからアクセサリへの通信を可能にします。この「プラグ アンド プレイ」スロット ドライバはスロットの中にあるカードという周辺装置を表し、周辺装置が装着されたときにカード挿入通知を提供することもします。

ユニバーサル コネクタのスロット ドライバはスナップ-オン周辺装置をスロットの中のカードにするため、ハンドヘルド アプリケーションはそのような周辺装置を拡張カードとして扱うことができます。コンジットの観点から見ると、ユニバーサル コネクタは、HotSync クレードルによって使用されている場合物理的に使用不可なので、クレードル-ベースの HotSync 実施中はそのような周辺装置はアクセス不可です。しかしながら、HotSync 実施が無線接続 - 例えば、赤外線通信 - 経由である場合、コンジットはそのような周辺装置にアクセスすることができます。どうすればコンジットがカスタム ファイル システムや I/O デバイスにアクセスするためのカスタム呼び出しを行えるかについての説明は {{goto Custom Calls,「カスタム呼び出し」}} を参照してください。

この章の残りの部分では、I/O カードが使用できる場合は常に「拡張カード」という言葉は「拡張カード」と「プラグ アンド プレイ周辺装置」の両方の意味になります。しかし、HotSync 実施がユニバーサル コネクタ経由ではない場合に限ります。


!!{{anchor Architectural Overview}}アーキテクチャの概要 {{goto top,^TOP^}}

{{goto Figure 6.1,図 6.1}} は Palm OS 拡張アーキテクチャを示しています。それは複数のファイル システムをサポートして、雑多の物理拡張メカニズムをサポートするのに十分なほどフレキシブルに設計されている一方で、アプリケーションと Palm OS の他の部分に首尾一貫した API のセットを提供します。

以下の節では Palm OS 拡張アーキテクチャの主要なコンポーネントについて説明します。以下のコンポーネントについて、ボトム アップで説明していきます:

*{{goto Slot Drivers,スロット ドライバ}}
*{{goto File Systems,ファイル システム}}
*{{goto VFS Manager,VFS マネージャ}}
*{{goto Expansion Manager,拡張マネージャ}}

{{anchor Figure 6.1}}
'''図 6.1 Palm OS 拡張アーキテクチャ'''

{{img exparch.gif,style='width:402px;height:585px;'}}


!{{anchor Slot Drivers}}スロット ドライバ {{goto top,^TOP^}}

スロット ドライバはハンドヘルドの標準 Palm OS 共有ライブラリです。それはハードウェアへのアクセスをカプセル化して、拡張マネージャとオプションとしてファイル システム ライブラリに標準サービス セットを提供する特別なライブラリです。{{goto Figure 6.1,図 6.1}} で描かれているように、ハンドヘルド アプリケーションもコンジットも通常はスロット ドライバと直接に相互作用しません。

各拡張スロットはそれに関連付けられたスロット ドライバを持ちます。スロットはハンドヘルドの拡張マネージャによって代入される固有の'''スロット参照番号'''によって識別されます。拡張カード自体は個々に番号を振られません; 通常、アプリケーションはカードが挿入されているスロットを参照します。しかしながら、スロットはある時点でカードを持つかもしれませんし、持たないかもしれません、さらに、アプリケーションが実行中にカードが挿入、取り外しされる可能性もあるということに注意してください。

ハンドヘルドの拡張マネージャはスロットをスロット参照番号によって識別します。これらのスロット参照番号は、スロット ドライバが拡張マネージャにロードされる順番次第で変更されるかもしれません。さらに、スロット参照番号は拡張マネージャ API 経由の HotSync 実施中はコンジットだけが使用可能です。それゆえ、HotSync マネージャは各 HotSync 実施の開始時に'''スロット ID''' をハンドヘルドのスロットに割り当て、それらをデスクトップのユーザ データ保存場所の対応するユーザのために保存します。

HotSync 実施中には使用されないユーザ データ API とインストール援助機能 API はスロットを識別するためにスロット参照番号の代わりにスロット ID を使用します。これらの API は単に最後の HotSync 実施中にデスクトップに保存された情報を返します。そのため、ユーザは HotSync 実施と次の HotSync 実施の間にハンドヘルドを変更または更新しているかもしれないので、この情報は次の HotSync 実施時までの間に不正確なものになっているかもしれません。


!{{anchor File Systems}}ファイル システム {{goto top,^TOP^}}

Palm OS 拡張アーキテクチャは Palm OS のすべてのファイル システム実装のために共通インターフェイスを定義します。このインターフェイスは、名前を付けられたボリュームにあるファイルとディレクトリの両方をオープン、クローズ、読み込み、書き込み、削除する機能を含むファイル システムとの相互作用のための API の完全なセットから成り立ちます。これらのハンドヘルド API はほぼすべてデスクトップで利用可能であり、そのため、コンジットはハンドヘルド アプリケーションとほとんど同じようにファイル システムと相互作用することができます。

ファイル システムの実装はハンドヘルドの共有ライブラリとしてパッケージされています。それらは、VFAT, HFS, NFS などのある特定のタイプのファイル システムのサポートを追加するモジュール形式のプラグ-インです。Palm OS 拡張アーキテクチャは複数の'''ファイル システム ライブラリ'''がいずれかの時点でインストールされることを許可します。通常、VFAT ファイル システムの実装が提供されています。

VFAT はすべてのタイプのフラッシュ メモリの業界標準です。それはデスクトップと他のデバイスへのデータとアプリケーションの転送を容易にします。Palm OS ソフトウェア バージョン 4.0 以降に含まれる VFAT ファイル システム ライブラリは、元来、補助記憶装置メディア上の VFAT ファイル システムをサポートします。それは FAT ファイル システムと VFAT ファイル システムを認識、マウントすることができ、認識されていないメディアと壊れているメディアの再フォーマットを提供します。

VFAT ファイル システムは Unicode/UCS2 フォーマットで保存されたロング ファイル名を要求するため、標準 VFAT ファイル システム ライブラリは UCS2 と Shift-JIS (標準 Palm OS マルチ-バイト文字エンコード)間と UCS2 と Palm OS/Latin エンコード間の変換をサポートします。


!{{anchor VFS Manager}}VFS マネージャ {{goto top,^TOP^}}

仮想ファイル システム(VFS)マネージャは、ハンドヘルド アプリケーションとデスクトップ コンジットに多くの異なるメディア タイプ上の多くの異なるファイル システムへのアクセスを提供する統一された API を提供します。それは基本的なファイル システムを抽象化して、それにより、アプリケーションとコンジットは使用する実際のファイル システムを考慮することなく書き込みを行うことができます。VFS マネージャはコンジットに HotSync 実施中のファイル、ディレクトリ、ボリュームを操作するための多くの API を提供します。


{{anchor The VFS Manager and the Sync Manager APIs}}
'''VFS マネージャ API と同期マネージャ API'''

VFS マネージャが C/C++ Sync Suite に追加されたことにより、コンジットが Palm ユーザ データを保存、取得することができる 2 つの別々の方法があります:

*同期マネージャはハンドヘルドの主記憶 RAM の中のリソース データベースとレコード データベースにアクセスします。それは効率的にハンドヘルドのデータ マネージャを呼び出します - データ マネージャは制限のあるダイナミック RAM の大部分と不揮発性 RAM をたいていのハンドヘルドにあるディスクの代わりに使用することを特に目的として設計されています。ハンドヘルド上の記憶装置のデータが必要とされるものデータのすべてであるとき、または、効率的なデータへのアクセスが最重要のとき、Palm OS ユーザ データを保存、取得するために同期マネージャを使用します。
*VFS マネージャと拡張マネージャは特に補助記憶装置である拡張メモリの多くのタイプをサポートするために設計されています。VFS マネージャ API は多くのタイプの拡張メディア上にある多くの異なるタイプのファイル システムへの首尾一貫したインターフェイスを提供します。VFS マネージャ API を使用するコンジットは非常に幅広くさまざまなファイル システムをサポートすることができます。あなたのコンジットが拡張メディアに保存されているデータに読み書きを行う必要があるときは、VFS マネージャを使用します。

コンジットは与えられた各シチュエーションで適切な API を使用すべきです。外部メディアへのアクセスがまったく必要でないときはいつでも、ストレージ ヒープのストレージを効率的に管理する同期マネージャが使用されるべきです。相互運用性とファイル システム アクセスが必要なときは、VFS マネージャ API を使用します。しかしながら、VFS マネージャはデータにアクセスしているときすべての読み込み、書き込みをハンドヘルドのメモリにバッファリングするというオーバヘッドを発生させるので、この機能を特に必要とするコンジットだけが VFS マネージャを使用すべきであるということに注意してください。

同期マネージャについての更なる情報は、[[第 4 章 「クラシック同期マネージャ API の使用」|C/C++ Sync Suite Companion601/4]] を参照してください。VFS マネージャによって提供される API の詳細は、''C/C++ Sync Suite Reference'' の [[第 10 章 「仮想ファイル システム マネージャ API」|C/C++ Sync Suite Reference601/10]] を参照してください。


!{{anchor Expansion Manager}}拡張マネージャ {{goto top,^TOP^}}

拡張マネージャは、Palm ハンドヘルドのスロット ドライバを管理するソフトウェア レイヤです。サポートされる拡張カードのタイプには Memory Stick と SD カードがあります - それらだけに制限されるわけではありません。拡張マネージャはこれらの拡張カードを直接はサポートしません; そうではなく、低レベル スロット ドライバとファイル システム ライブラリの助けを受けてこれらのタイプのメディアをサポートするアーキテクチャとより高レベルの API 関数のセットを提供します。

ハンドヘルドの拡張マネージャは:

*カードの挿入と取り外しの通知をブロードキャストします。
*カードの挿入と取り外しを示すサウンドを鳴らします。
*カードに存在するボリュームをマウント、アンマウントします。

コンジットに対して拡張マネージャ API は、HotSync 実施中にハンドヘルド上の拡張マネージャへのインターフェイスを提供します。このインターフェイスを通して、コンジットはスロットに拡張カードがあるのかどうかを決定し、それらのカードについての情報を取得することができます。

拡張マネージャによって提供される API の詳細は、''C/C++ Sync Suite Reference'' の [[第 9 章 「拡張マネージャ API」|C/C++ Sync Suite Reference601/9]] を参照してください。


!!{{anchor Standard Directories}}標準ディレクトリ {{goto top,^TOP^}}

Palm OS によって提供されるユーザの体験は一般的なデスクトップ コンピュータよりもより単純で、より直感的なものです。この単純さのある部分は、Palm OS はユーザにファイル システムを提示しないという事実からくるものです。ユーザは複雑な一般的なファイル システムを理解する必要がありません; アプリケーションはボタンまたはアイコンを 1, 2 回タップすることで簡単に利用可能になり、それらのアプリケーションに関連付けられているデータは各アプリケーションを通してのみアクセス可能です。拡張カード上のファイル システムをサポートする一方でユーザ操作の単純さを維持することは、拡張カード上のディレクトリの標準セットにより可能になります。

{{goto Table 6.1,表 6.1}} はすべての「規格対応の」 Palm OS 補助記憶装置の標準ディレクトリ階層をリストにしています。すべての Palm OS 関連データは、効果的にプライベート名前空間をパーティション分けしながら、 {{span style='color:blue;font-family:monospace;',/PALM}} ディレクトリ(または、{{span style='color:blue;font-family:monospace;',PALM}} ディレクトリのサブディレクトリ)の中にあるべきです

{{anchor Table 6.1}}
'''表 6.1 標準ディレクトリ'''

,ディレクトリ,説明
,"{{span style='color:blue;font-family:monospace;',/}}",補助記憶装置のルート。
,"{{span style='color:blue;font-family:monospace;',/PALM}}","Palm OS アプリケーションによって書き込まれる大部分のデータはこのディレクトリのサブディレクトリに存在します。{{span style='color:blue;font-family:monospace;',start.prc}} は {{span style='color:blue;font-family:monospace;',/PALM}} 直下にあります。このオプションのファイルは、補助記憶装置がマウントされたときに、自動的に実行されます。さらに他のアプリケーションもこのディレクトリの中にあるかもしれません。"
,"{{span style='color:blue;font-family:monospace;',/PALM/Backup}}","バックアップのために Palm OS によって予約されています。"
,"{{span style='color:blue;font-family:monospace;',/PALM/Programs}}","その他のアプリケーションとデータの置き場所。"
,"{{span style='color:blue;font-family:monospace;',/PALM/Launcher}}","可視のランチャー アプリケーションのホーム。"

これらの標準ディレクトリに加えて、VFS マネージャは'''デフォルト ディレクトリ'''というコンセプトをサポートします; そのディレクトリにはある特定のタイプのデータが保存されます。更なる情報は、{{goto Determining the Default Directory for a Particular File Type,「ある特定のファイル タイプのためのデフォルト ディレクトリの決定」}} を参照してください。


!!{{anchor Card Insertion and Removal}}カードの挿入と取出 {{goto top,^TOP^}}

拡張マネージャはいつでも拡張メディアの挿入と取り出しをサポートします。カードを挿入するとアプリケーションは切り替わるかもしれませんが、ハンドヘルドは挿入前と同様に走り続けます。ハンドヘルドをリセットする必要はありませんし、また、カードが挿入または取り外されたことを明示的に知らせる必要もありません。

::{{span style='color:red;font-weight:bold;',WARNING!}}
:::ある特定の拡張カードの構成の仕方により、アプリケーションまたはコンジットが拡張カードに書き込みを行っている最中にユーザがそのカードを取り外した場合に、ある特定の稀な状況でそのカードはもはや使えなくなる、あるいは、再フォーマットが必要になるといったダメージを受けることがあります。アプリケーションとコンジットは可能な限りカードの明確なポイントにだけ書き込むべきです。しかしながら、アプリケーションとコンジットがカードから読み込みを行っている最中は、カードにダメージを与える恐れ無しにカードを取り外すことができます。

HotSync 実施中、あなたのコンジットがカードにアクセスしている最中にユーザがそのカードを取り外した場合、拡張マネージャ関数または VFS マネージャ関数は失敗します。PalmSource 社は、あなたのコンジットが常にすべての API 関数から返されるエラーをチェックし、HotSync ログにユーザにとって有用なメッセージを追加することを推奨します。


!!{{anchor Checking for Expansion Cards}}拡張カードのチェック {{goto top,^TOP^}}

拡張カードを探す前に、あなたのコンジットはまず、拡張マネージャと VFS マネージャの存在を確かめることによって、ハンドヘルドが拡張をサポートしていることを確認すべきです。それから、マウントされたボリュームに対して問合せることができます。最後に、あなたのコンジットはカードの能力を確かめることを望むかもしれません; カードはメモリを持つのかどうか、I/O を持つのかどうか、など。以下の小節でこれらの各ステップについて説明します:

*{{goto Verifying Handheld Compatibility,ハンドヘルド互換性の検証}}
*{{goto Checking for Mounted Volumes,マウントされたボリュームのチェック}}
*{{goto Enumerating Slots,スロットの列挙}}
*{{goto Determining a Card's Capabilities,カードの能力の決定}}

!{{anchor Verifying Handheld Compatibility}}ハンドヘルド互換性の検証 {{goto top,^TOP^}}

Palm ハンドヘルドには多くの異なるタイプがあり、将来そのタイプはさらに増えます。あるものは補助記憶装置をサポートするための拡張スロットを持ち、あるものは持ちません。補助記憶装置をサポートするためのハードウェアはオプションであり、あるタイプのハンドヘルドには存在するかもしれませんし、存在しないかもしれません。物理的な拡張能力を持たないハンドヘルドでは拡張マネージャと VFS マネージャは役に立たないため、それらはすべての Palm ハンドヘルドに存在するわけではないオプションのシステム拡張です。

ハンドヘルド コンフィグレーションとハンドヘルドにプラグ-インまたはスナップ-オン(訳者: 取り付ける?)することができるモジュールには非常に多くの種類があるため、コンジットはハンドヘルドが補助記憶装置をサポートするかどうか決定するときにそのハンドヘルドの製造者やモデルを検出しようとすべきではありません。その代わりに、基本 OS の存在と能力をチェックします。

ハンドヘルドの VFS マネージャと拡張マネージャは両方ともがオプションである別個のシステム拡張です。それらは両方とも Palm OS ソフトウェア バージョン 4.0 で導入された OS のその他の部分を使用します。

::NOTE
:::あなたのコンジットは VFS マネージャと拡張マネージャの存在を両方ともチェックできるかもしれませんが、VFS マネージャは拡張マネージャに依存し、拡張マネージャ無しに存在しないという事実を利用することができます。それゆで、VFS マネージャが存在する場合、間違いなく拡張マネージャも存在すると見なすことができます。

それゆであなたのコンジットは、VFS マネージャまたは拡張マネージャのいずれかの API 関数を呼び出す前に、ハンドヘルドに VFS マネージャが存在しているかどうかをチェックしなければなりません。ここでは、ハンドヘルドに VFS マネージャが存在しているかどうかを検証するための 2 つの方法を提供します。

*{{goto Using the VFSSupport Function,VFSSupport 関数の使用}}
*{{goto Using the SyncReadFeature Function,SyncReadFeature 関数の使用}}


{{anchor Using the VFSSupport Function}}
'''VFSSupport 関数の使用'''

デスクトップ VFS マネージャ API は、ハンドヘルドが拡張スロットを持つかどうか、いずれかのファイル システムが存在するかどうかを検証するための {{goto VFSSupport,VFSSupport()|C/C++ Sync Suite Reference601/10}} を提供します。

あなたが {{span style='color:blue;font-family:monospace;',VFSSupport()}} を呼び出すと、それはハンドヘルドの拡張マネージャのバージョン - これは VFS マネージャ バージョン番号と等価です - を返すか、拡張スロットが存在しない場合は 0 を返します。それは 2 番目のパラメータにカードに存在するボリュームの数を返すか、カードにファイル システムが存在しないあるいはスロットにカードが入っていない場合は 0 を返します。

::NOTE
:::{{span style='color:blue;font-family:monospace;',VFSSupport()}} 関数はハンドヘルドが拡張スロットを持つかどうかを検証するための主要な方法です。この情報はすでにデスクトップ VFS マネージャによって取得されているため、あなたのコンジットが {{span style='color:blue;font-family:monospace;',VFSSupport()}} を呼び出したときにハンドヘルドへの呼び出しは生じません - これは {{span style='color:blue;font-family:monospace;',SyncReadFeature()}} を使用するよりも効率的です。


{{anchor Using the SyncReadFeature Function}}
'''SyncReadFeature 関数の使用'''

同期マネージャ API は、ハンドヘルドに定義された機能セットが存在するかどうかを検証するための {{goto SyncReadFeature,SyncReadFeature()|C/C++ Sync Suite Reference601/5}} を提供します。VFS マネージャのシステム機能のチェックを行うには、以下のようにします:
同期マネージャ API は、ハンドヘルドに定義された機能セットが存在するかどうかを検証するための {{goto SyncReadFeature,SyncReadFeature()|C/C++ Sync Suite Reference601/5-2}} を提供します。VFS マネージャのシステム機能のチェックを行うには、以下のようにします:

*{{goto SyncReadFeature,SyncReadFeature()|C/C++ Sync Suite Reference601/5}} を呼び出します。
*{{goto SyncReadFeature,SyncReadFeature()|C/C++ Sync Suite Reference601/5-2}} を呼び出します。
*機能作成者に対して {{span style='color:blue;font-family:monospace;',sysFileCVFSMgr}} を提供します。
*機能番号に対して {{span style='color:blue;font-family:monospace;',vfsFtrIDVersion}} を提供します。

{{goto Listing 6.1,コード 6.1}} は、VFS マネージャの存在とバージョンをチェックするためにどのように {{span style='color:blue;font-family:monospace;',SyncReadFeature()}} を使用するのかを示しています。{{span style='color:blue;font-family:monospace;',expectedVFSMgrVersionNum}} はあなたが予期している実際のバージョン番号で置き換えるべきです。

{{anchor Listing 6.1}}
'''コード 6.1 VFS マネージャの存在を検証するための SyncReadFeature'''

 UINT32 vfsMgrVersion;
 long err;
 
 err = SyncReadFeature(sysFileCVFSMgr, vfsFtrIDVersion, 
                       &vfsMgrVersion);
 if(err){
     // The VFS Manager is not installed.
     //(VFS マネージャはインストールされていない)
        } 
   else {
     // Check the version number of the VFS Manager,
     // if necessary.
     //(必要があれば VFS マネージャのバージョン番号をチェックする)
     if(vfsMgrVersion == expectedVFSMgrVersionNum)
         // Everything is OK. (すべて OK)
 }

例えもし、VFS マネージャの存在が拡張マネージャの存在を暗示していたとしても、以下のようにさらに拡張マネージャのシステム機能のチェックを行うことができます:

*{{goto SyncReadFeature,SyncReadFeature()|C/C++ Sync Suite Reference601/5}} を呼び出します。
*{{goto SyncReadFeature,SyncReadFeature()|C/C++ Sync Suite Reference601/5-2}} を呼び出します。
*機能作成者に対して {{span style='color:blue;font-family:monospace;',sysFileCExpansionMgr}} を提供します。
*機能番号に対して {{span style='color:blue;font-family:monospace;',expFtrIDVersion}} を提供します。

{{goto Listing 6.2,コード 6.2}} は、拡張マネージャの存在とバージョンをチェックするためにどのように {{span style='color:blue;font-family:monospace;',SyncReadFeature()}} を使用するのかを示しています。{{span style='color:blue;font-family:monospace;',expectedExpMgrVersionNum}} はあなたが予期している実際のバージョン番号で置き換えるべきです。

{{anchor Listing 6.2}}
'''コード 6.2 拡張マネージャの存在を検証するための SyncReadFeature'''

 UINT32 expMgrVersion;
 long err;
 
 err = SyncReadFeature(sysFileCExpansionMgr, expFtrIDVersion, 
                       &expMgrVersion);
 if(err){
     // The Expansion Manager is not installed.
     //(拡張マネージャはインストールされていない))
        } 
   else {
     // Check version number of the Expansion Manager, 
     // if necessary.
     //(必要があれば拡張マネージャのバージョン番号をチェックする)
     if(expMgrVersion == expectedExpMgrVersionNum)
         // Everything is OK. (すべて OK)
 }


!{{anchor Checking for Mounted Volumes}}マウントされたボリュームのチェック {{goto top,^TOP^}}

コンジットは Palm OS がハンドヘルドに挿入またはスナップ-オンされ認識されたボリュームを自動的にマウントするということに依存します。それゆえ、コンジットは単純にマウントされたボリュームを列挙して、その 1 つを適当に選択することができます。{{goto Listing 6.3,コード 6.3}} はそれをどのように行うかを示しています。

{{anchor 6.3}}
'''コード 6.3 マウントされたボリュームの列挙'''

 WORD numVolumes = 0; 
 WORD *pwVolRefNumList;
 
 // The first call returns only the number of mounted volumes,
 // not their reference numbers.
 // 最初の呼び出しはマウントされているボリュームの数だけを返し、
 // ボリュームの参照番号は返しません。
 VFSVolumeEnumerate (&numVolumes, NULL); 
   if (numVolumes)
   {
     // Allocate buffer for volume reference list.
     // ボリュームの参照リストのためのバッファの割り当て。
     pwVolRefList = new WORD [numVolumes];
   if (pwVolRefList != NULL)
     {
       // Get the volume reference numbers.
       // ボリューム参照番号の取得。
     VFSVolumeEnumerate (&numVolumes, pwVolRefList);
     }
 }

{{goto VFSVolumeEnumerate,VFSVolumeEnumerate()|C/C++ Sync Suite Reference601/10}} で取得されるボリューム参照番号は、多くのボリューム、ディレクトリ、ファイル操作で使用することができます。それらの操作についてはこの章の後半で説明します。

時々、コンジットは利用可能な補助記憶装置があるかどうかということ以上のことを知る必要に迫られます。それらのコンジットは、次の小節で説明するハンドヘルドの各スロットのチェックで始まる 2, 3 の追加のステップを必要とするかもしれません。


!{{anchor Enumerating Slots}}スロットの列挙 {{goto top,^TOP^}}

あなたはどの拡張モジュールがハンドヘルドに取り付けられているかを決定する前に、まずそれらのモジュールがどのように取り付けられる可能性があるかを決定しなければなりません。拡張カードといくつかの I/O デバイスは物理スロットにプラグ-インされる可能性があり、スナップ-オン モジュールはハンドヘルドのユニバーサル コネクタを通して接続される可能性があります。それらが物理的にどのように接続されているかに関係なく、拡張マネージャはそれらを開発者に対してスロットとして表します。{{goto ExpSlotEnumerate,ExpSlotEnumerate()|C/C++ Sync Suite Reference601/9}} 関数は単純にそれらのスロットを列挙します。{{goto Listing 6.4,コード 6.4}} はこの関数の使用例を示しています。

{{anchor Listing 6.4}}
'''コード 6.4 ハンドヘルドの拡張スロットの列挙'''

 WORD wSlotRefList[32]; // Buffer for slot reference numbers.
 WORD wSlotRefCount;    // Number of entries allocated for list.
 long retval;
 
 // Allocate enough space for buffer.
 wSlotRefCount = sizeof (wSlotRefList) / sizeof (wSlotRefList[0]);
 retval = ExpSlotEnumerate(&wSlotRefCount, wSlotRefList, NULL);

{{span style='color:blue;font-family:monospace;',ExpSlotEnumerate()}} によって返されるスロット参照番号の配列はすべてのスロットを一意に認識します。スロット参照番号は、スロットにカードまたはその他の拡張モジュールがあるかどうかといったスロットについての情報を取得するために、さまざまな拡張マネージャ関数に提供することができます。


{{anchor Checking a Slot for the Presence of a Card}}
'''スロットにカードが存在するかどうかのチェック'''

{{goto ExpCardPresent,ExpCardPresent()|C/C++ Sync Suite Reference601/9}} 関数を使って与えられたスロットにカードが存在するかどうかを決定します。スロット参照番号が与えられるとこの関数は、スロットにカードがある場合は {{span style='color:blue;font-family:monospace;',SYNCERR_NONE}} を返し、スロットにカードが無い場合や指定されたスロットに問題がある場合はエラーを返します。


!{{anchor Determining a Card's Capabilities}}カードの能力の決定 {{goto top,^TOP^}}

ただ拡張カードがスロットに挿入されている、または、ハンドヘルドに接続されているということを知るだけでは十分ではありません; あなたのコンジットは、実行する必要がある操作がそのカードに対して互換性を持つことを保証するために、カードについての何らかの情報を得る必要があります。例えば、あなたのコンジットがカードにデータを書き込む必要がある場合、書き込みが許可されているかどうかを知ることが重要です。

あなたのコンジットが利用可能な能力はカードだけではなくスロット ドライバにも依存します。ハンドヘルド製造者は、拡張ハードウェアのある特定のクラスへの標準インターフェイスを定義するスロット ドライバを 1 つあるいはそれ以上提供します。カード、デバイス製造者はさらにそのカード特有のスロット ドライバを提供することを選択するかもしれませんし、ある特定のカードへのアクセスと制御のためにアプリケーションがスロット カスタム関数を登録された作成者コードを使用することを必要とするかもしれません。

スロット ドライバは標準能力セットのための拡張カード問合せに対して責任を持ちます。与えられた拡張カードのためのスロット ドライバが存在しているとき、あなたは {{goto ExpCardInfo,ExpCardInfo()|C/C++ Sync Suite Reference601/9}} 関数を使って以下のことを決定できます:

*拡張カードの製造者の名前。
*拡張カードの名前
*「デバイス クラス」または拡張カードのタイプ。ここで返される値は「Ethernet」や「Backup」を含むかもしれません
*シリアル番号などのデバイスの一意な識別子

{{span style='color:blue;font-family:monospace;',ExpCardInfo()}} 関数が存在しているということがすべての拡張カードがそれらの能力をサポートしているということを暗示しているわけではないということに注意してください。それはただ、そのスロット ドライバはカードにアクセスして、見つけたものを拡張マネージャに報告することができるということを意味しているだけです。


!!{{anchor Volume Operations}}ボリューム操作 {{goto top,^TOP^}}

拡張カードがファイル システムをサポートする場合、VFS マネージャはあなたが多くの標準ボリューム操作を行うことを可能にします。現在どのボリュームがマウントされ利用可能なのかを決定するために {{goto VFSVolumeEnumerate,VFSVolumeEnumerate()|C/C++ Sync Suite Reference601/10}} を使用します。この関数 - 利用方法は {{goto Checking for Mounted Volumes,「マウントされたボリュームのチェック」}} で示されています - ボリュームの参照番号のリストを返します。あなたはそのリストからボリューム参照番号を選択して、それをその後に続くボリューム操作に渡します。

::NOTE
:::ボリューム参照番号は、ハンドヘルドが与えられたボリュームをマウントするたびに変更される可能性があります。あるボリュームを追跡し続けるには、そのボリュームの参照番号ではなくボリュームのラベルを保存しておきます。

ユーザがマウント可能なボリュームを持つカードをスロットに挿入すると、VFS マネージャは自動的にそのボリュームをマウントしようと試みます。コンジットはボリュームをマウントすることはできません。

ボリュームをフォーマットするには {{goto VFSVolumeFormat,VFSVolumeFormat()|C/C++ Sync Suite Reference601/10}} を使用します。カードがフォーマットされると、VFS マネージャは自動的にそのカードをマウントし、{{span style='color:blue;font-family:monospace;',VFSVolumeFormat()}} が新しいボリューム参照番号を返してきます。

{{goto VFSVolumeGetLabel,VFSVolumeGetLabel()|C/C++ Sync Suite Reference601/10}} と {{goto VFSVolumeSetLabel,VFSVolumeSetLabel()|C/C++ Sync Suite Reference601/10}} 関数はそれぞれボリューム ラベルを取得、セットします。ファイル システムは文字列の有効性を検証する責任を持つため、あなたは好きな値をボリューム ラベルにセットしようとすることができます。ファイル システムが与えられた名前をネイティブにサポートしない場合 VFS マネージャはロング ボリューム名をサポートするために使用される {{span style='color:blue;font-family:monospace;',/VOLUME.NAM}} ファイルを作成し(更なる情報は {{goto Naming Volumes,「ボリュームのネーミング」}} を参照してください)、ファイル システムが提供された文字列をサポートしない場合あなたはエラーを受け取ります。(訳者: VFS マネージャが {{span style='color:blue;font-family:monospace;',/VOLUME.NAM}} を作成する条件と、エラーが返される条件の違いが分からない・・・)

::NOTE
:::たいていのコンジットは {{goto VFSVolumeSetLabel,VFSVolumeSetLabel()|C/C++ Sync Suite Reference601/10}} 関数を呼び出すべきではありません。この関数はルート ディレクトリでファイルを作成、削除するかもしれず、それにより現在の {{goto VFSDirEntryEnumerate,VFSDirEntryEnumerate()|C/C++ Sync Suite Reference601/10}} 呼び出しのいずれかを無効にする可能性があります。

ボリュームについての追加情報は {{goto VFSVolumeSize,VFSVolumeSize()|C/C++ Sync Suite Reference601/10}} と {{goto VFSVolumeInfo,VFSVolumeInfo()|C/C++ Sync Suite Reference601/10}} を使用することで取得できます。名前が暗示するように {{span style='color:blue;font-family:monospace;',VFSVolumeSize()}} はボリュームのサイズ情報を返します。特に、それはボリュームの総バイト数と現在使用されているバイト数の両方を返します。{{span style='color:blue;font-family:monospace;',VFSVolumeInfo()}} は以下のものを含むボリュームについてのさまざまな情報を返します:

*そのボリュームは隠されているかどうか
*そのボリュームは Read-only かどうか
*そのボリュームはスロット ドライバでサポートされるかどうか、また、Palm OS Emulator でシミュレートされているかどうか
*基本ファイル システムのタイプと作成者
*そのボリュームが関連付けされているスロットと、そのスロットを制御しているスロット ドライバの参照番号
*SD, CompactFlash, Memory Stick などのそのボリュームが存在しているメディアのタイプ

上記のすべての情報が {{goto VolumeInfoType,VolumeInfoType|C/C++ Sync Suite Reference601/10}} 構造体の内部にカプセル化されて返されます。ボリュームが隠されているかどうか、Read-only かどうかはさらにこの構造体の単一のフィールドの中にエンコードされています; このフィールドを形成するビットについては、''C/C++ Sync Suite Reference'' の {{goto Volume Attributes,「ボリューム属性」|C/C++ Sync Suite Reference601/10}} を参照してください。

この節の残りでは以下のことについてカバーします:

*{{goto Hidden Volumes,隠されたボリューム}}
*{{goto Matching Volumes to Slots,ボリュームのスロットへの一致}}
*{{goto Naming Volumes,ボリュームのネーミング}}


!{{anchor Hidden Volumes}}隠されたボリューム {{goto top,^TOP^}}

ボリューム属性に含まれるものに "hidden" ビット - {{span style='color:blue;font-family:monospace;',vfsVolumeAttrHidden}} - があります。これは、カード上のボリュームが可視か隠されているかを示します。通常、隠されているボリュームは直接ユーザが利用することはできません; ランチャとカード情報アプリケーションは両方ともすべての隠されているボリュームを無視します。

ボリュームを隠すには、{{span style='color:blue;font-family:monospace;',/PALM}} ディレクトリの中に {{span style='color:blue;font-family:monospace;',HIDDEN.VOL}} という名前の空のファイルを作成するだけです。{{goto VFSVolumeInfo,VFSVolumeInfo()|C/C++ Sync Suite Reference601/10}} 関数はこのファイルを探して、見つかった場合はそのボリュームの他の属性とともに {{span style='color:blue;font-family:monospace;',vfsVolumeAttrHidden}} ビットを返します。


!{{anchor Matching Volumes to Slots}}ボリュームのスロットへの一致 {{goto top,^TOP^}}

たいていの場合、コンジットは {{goto ExpCardInfo,ExpCardInfo()|C/C++ Sync Suite Reference601/9}} によって提供される拡張カードの特性を知る必要はありません。しばしば、{{goto VFSVolumeInfo,VFSVolumeInfo()|C/C++ Sync Suite Reference601/10}} によって提供される情報で十分です。しかしながら、ある特定のボリュームについてそれ以上に知る必要のあるアプリケーションもあります。例えば、カードの製造者やタイプが重要になるかもしれません。

{{span style='color:blue;font-family:monospace;',VFSVolumeInfo()}} によって返される {{goto VolumeInfoType,VolumeInfoType|C/C++ Sync Suite Reference601/10}} 構造体は、{{span style='color:blue;font-family:monospace;',ExpCardInfo()}} に渡すことができる {{span style='color:blue;font-family:monospace;',slotRefNum}} フィールドを含みます。これは、あなたがある特定のボリュームが存在しているカードについての特性情報を取得することを可能にします。

与えられた参照番号に対応するボリュームの情報を取得することはそれほど単純なことではありません。なぜなら、スロット参照番号を与えられてボリューム参照番号を返す関数は無いからです。しかしながら、ボリュームがスロット ベースならば、あなたはマウントされているボリュームを反復処理して、各ボリュームのスロット参照番号をチェックすることができます。(あるボリュームがスロット ベースかどうかを決定するには、{{span style='color:blue;font-family:monospace;',slotRefNum}} によって指定されているボリュームにアクセスする前に {{span style='color:blue;font-family:monospace;',VolumeInfoType}} 構造体の中の {{span style='color:blue;font-family:monospace;',mountClass}} が {{span style='color:blue;font-family:monospace;',sysFileTSlotDriver}} にセットされているかどうかをチェックします。)


!{{anchor Naming Volumes}}ボリュームのネーミング {{goto top,^TOP^}}

ハンドヘルド ファイル システム ライブラリが異なると、サポートするボリューム名の最大長が異なり、文字セットの制限も異なります。ファイル システム ライブラリは与えられたボリューム名が有効かどうかを検証する責任があり、有効でない場合はエラーを返します。コンジット開発者の立場から見ると、ボリューム名は 255 文字までの長さで、印刷可能な文字はすべて含めることができます。

ファイル システム ライブラリはボリューム名を基本的なファイル システムが受け入れ可能なフォーマットに変換する責任があります。例えば、8.3 ネーミング規約はロング ボリューム名を変換するのに使用され、最初の 11 文字が有効で、非スペース文字が使用されます。この例で有効な文字は、A-Z, 0-9, $, %, ', -, _, @, ~, ', !, (, ), ^, #, & です。

ハンドヘルドの拡張カード上のボリュームのネーミングについての更なる情報は、''Palm OS Programmer's Companion'' 参照してください。


!!{{anchor File Operations}}ファイル操作 {{goto top,^TOP^}}


!{{anchor Common File Operations}}共通ファイル操作 {{goto top,^TOP^}}

{{goto Table 6.2,表 6.2}} で示されているように、VFS マネージャはデスクトップ コンピュータとそれよりも大きなコンピュータ システムでおなじみの標準ファイル操作のすべてを提供します。これらの関数はあなたの予想以上の機能を持っているため、その使用方法についての詳細はここでは扱いません。パラメータ、返り値、各関数の副作用については、''C/C++ Sync Suite Reference'' の [[第 10 章 「仮想ファイル システム マネージャ API」|C/C++ Sync Suite Reference601/10]] の中の各関数の説明を参照してください。

これらの関数のいくつかはファイルとディレクトリの両方に適用され、他はファイルだけに対して機能するということに注意してください。

{{anchor Table 6.2}}
'''表 6.2 共通ファイル操作'''

,関数,説明
,"{{goto FileOpen,FileOpen()|C/C++ Sync Suite Reference601/10}}",与えられたボリューム参照番号とファイル パスでファイルをオープンします。 
,"{{goto FileClose,FileClose()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルをクローズします。 
,"{{goto FileRead,FileRead()|C/C++ Sync Suite Reference601/10}}",ファイルから指定されたバッファにデータを読み込みます。
,"{{goto FileWrite,FileWrite()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルにデータを書き込みます。
,"{{goto FileSeek,FileSeek()|C/C++ Sync Suite Reference601/10}}",オープンされているファイル内で読み込みまたは書き込みを行う位置をセットします。
,"{{goto FileTell,FileTell()|C/C++ Sync Suite Reference601/10}}",オープンされているファイル内のファイル ポインタの現在位置を取得します。
,"{{goto FileEOF,FileEOF()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルのファイル終端状態 (原文: end-of-file) を取得します。
,"{{goto FileCreate,FileCreate()|C/C++ Sync Suite Reference601/10}}",与えられたボリューム参照番号とファイル パスでファイルを作成します。
,"{{goto FileDelete,FileDelete()|C/C++ Sync Suite Reference601/10}}",クローズされているファイルーを削除します。
,"{{goto FileRename,FileRename()|C/C++ Sync Suite Reference601/10}}",クローズされているファイルをリネームします。
,"{{goto FileSize,FileSize()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルのサイズを取得します。
,"{{goto FileResize,FileResize()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルのサイズを変更します。
,"{{goto FileGetAttributes,FileGetAttributes()|C/C++ Sync Suite Reference601/10}}","オープンされているファイルの属性 - hidden, Read-only, システム, アーカイブ ビットを含む - を取得します。属性フィールドを形成するビットについては ''C/C++ Sync Suite Reference'' の {{goto File and Directory Attributes,「ファイルとディレクトリの属性」|C/C++ Sync Suite Reference601/10}} を参照してください。"
,"{{goto FileSetAttributes,FileSetAttributes()|C/C++ Sync Suite Reference601/10}}","オープンされているファイルの属性 - hidden, Read-only, システム, アーカイブ ビットを含む - をセットします。"
,"{{goto FileGetDate,FileGetDate()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルの作成日付、変更日付、最終アクセス日付を取得します。
,"{{goto FileSetDate,FileSetDate()|C/C++ Sync Suite Reference601/10}}",オープンされているファイルの作成日付、変更日付、最終アクセス日付をセットします。

あるファイルがオープンされると、そのファイルは固有の'''ファイル参照番号''': {{goto FileRef,FileRef|C/C++ Sync Suite Reference601/10}} によって識別されます。オープンされているファイルに対して処理を行う関数はファイル参照を使用します。{{span style='color:blue;font-family:monospace;',VFSFileOpen()}} などの他の関数は、ボリューム参照とボリューム内でファイルを識別するためのパスを必要とします。すべてのパスはボリュームから見て相対で、'''そのボリューム内では絶対'''です: VFS マネージャは「現在機能しているディレクトリ」(原文: "current working directory") という概念を持たないため、相対パス名はサポートされません。ディレクトリ セパレータ文字は正方向のスラッシュ: "/" です。指定されたボリュームのルート ディレクトリは "/" というパスによって指定されます。


!{{anchor Naming Files}}ファイルのネーミング {{goto top,^TOP^}}

ファイル システムが異なると、サポートするファイル名とパスの最大長が異なります。ファイル システム ライブラリは与えられたパスが有効かどうかを検証する責任があり、有効でない場合はエラーを返します。コンジット開発者の立場から見ると、ファイル名は 255 文字までの長さで、スペースとすべての文字セットの中の小文字を含むすべての標準文字を含めることができます。さらに以下の特別な文字を含めることができます:

*{{span style='color:blue;font-family:monospace;',"$ % ' - _ @ ~ ' ! ( ) ^ # & + , ; = [ ]"}}

ファイル システム ライブラリはファイル名とパスを基本的なファイル システムが受け入れ可能なフォーマットに変換する責任があります。例えば、8.3 ネーミング規約はロング ファイル名を変換するのに使用され、以下のガイドラインが使用されます:

*名前は最初の有効な 6 文字 - 最後のピリオドまでに現れる非スペース文字 - から作成されます。有効な文字は、A-Z, 0-9, $, %, ', -, _, @, ~, ', !, (, ), ^, #, & だけです。
*拡張子は最後のピリオドの後の最初の有効な 3 文字です。
*短縮されるファイル名がすでに存在しない場合、6 バイトの名前の最後に "~1" が付加されます。その後に続くその短縮ファイル名と同じファイル名を持つものは次の固有番号を持ちます。そのため、2 番目にその短縮ファイル名となるものは "~2" を付加されます。

拡張をサポートする Palm ハンドヘルドで提供される標準 VFAT ファイル システム ライブラリは、ロング ファイル名から FAT 適合名を作成するために上記の規則を使用します。


!{{anchor Working with Palm OS Databases}}Palm OS データベースに対する処理 {{goto top,^TOP^}}

拡張カードはしばしば Palm OS アプリケーションとデータを PRC と PDB フォーマットで保持するために使用されます。補助記憶メディアが Palm ハンドヘルドに接続される方法のために、拡張カードから直接アプリケーションを実行することはできず、コンジットはまずデータベースを VFS マネージャでメイン メモリに移動させずに同期マネージャを使ってそのデータベースを操作することもできません。しかしながら、VFS マネージャを使用するように作成されたコンジットは拡張カード上のファイルを直接操作することができます。

::NOTE
:::可能であるときは常に PRC/PDB ファイルとデータベースに同じ名前を与えてください。PRC/PDB ファイル名がデータベース名と異なり、ユーザがあなたのデータベースをカードからハンドヘルドにコピーしてその後に他のカードにコピーした場合、ファイル名は変化するかもしれません。これは、データベースがハンドヘルドからカードにコピーされるとき、データベース名が使用されるためです。
:::(訳者補足: PRC/PDB ファイルのファイル名はそれらに含まれるデータベースと同じ名前にすべきということだと思われる。)

{{anchor Transferring Palm OS Databases to and from Expansion cards}}
'''拡張カードとの Palm OS データベースのやりとり'''

{{goto VFSExportDatabaseToFile,VFSExportDatabaseToFil()|C/C++ Sync Suite Reference601/10}} 関数はデータベースをハンドヘルド上でのそのデータベースの内部フォーマットから等価な PRC または PDB ファイル フォーマットに変換して、それを拡張カードに移します。{{goto VFSImportDatabaseFromFile,VFSImportDatabaseFromFile()|C/C++ Sync Suite Reference601/10}} 関数は逆のことをします; この関数は {{span style='color:blue;font-family:monospace;',.prc}} または {{span style='color:blue;font-family:monospace;',.pdf}} ファイルを主記憶メモリに移して、そのファイルを Palm OS によって使用される内部フォーマットに返還します。Palm OS データベースをメイン メモリと拡張カード間で移動させるときにこれらの関数を使用します。

{{span style='color:blue;font-family:monospace;',VFSExportDatabaseToFile()}} と {{span style='color:blue;font-family:monospace;',VFSImportDatabaseFromFile()}} ルーチンは基本命令であり、データベースのサイズと移動で使用されるメカニズムしだいで時間がかかる可能性があります。

::重要
:::これらのインポート、エキスポート関数はスキーマ データベースに対しては機能しません。


!!{{anchor Directory Operations}}ディレクトリ操作 {{goto top,^TOP^}}

あなたがディレクトリでの操作で使用するおなじみの操作はすべて VFS マネージャによってサポートされます; これらは {{goto Common Directry Operations,「共通ディレクトリ操作」}} でリスト アップされています。ある共通操作 - 与えられたディレクトリ内にあるファイルを決定する - は、{{goto Enumerating the Files in a Directory,「ディレクトリ内のファイルの列挙」}} でいくらか詳細にカバーされています。Palm OS を実行していないデバイスとのデータの交換を改善するために、拡張カードの製造者はある特定のファイル タイプに対してデフォルト ディレクトリを指定しています。与えられたファイル タイプのデフォルト ディレクトリを決定、セットする方法については、{{goto Determining the Default Directory for a Particular File Type,「ある特定のファイル タイプのためのデフォルト ディレクトリの決定」}} で説明しています。

この節では以下のことについてカバーします:

*{{goto Directory Paths,ディレクトリ パス}}
*{{goto Common Direcotry Operations,共通ディレクトリ操作}}
*{{goto Enumeration the Files in a Direcotry,ディレクトリ内のファイルの列挙}}
*{{goto Determining the Default Directory for a Particular File Type,ある特定のファイル タイプのためのデフォルト ディレクトリの決定}}
*{{goto Default Directories Registered at Initialization,初期化時に登録されるデフォルトのディレクトリ}}


!{{anchor Directory Paths}}ディレクトリ パス {{goto top,^TOP^}}

すべてのパスはボリュームから見て相対であり、'''そのボリューム内では絶対'''です: VFS マネージャは「現在機能しているディレクトリ」(原文: "current working directory") という概念を持たないため、相対パス名はサポートされません。ディレクトリ セパレータ文字は正方向のスラッシュ: "/" です。指定されたボリュームのルート ディレクトリは "/" というパスによって指定されます。

ファイル名とディレクトリ名で使用する有効な文字についての詳細は {{goto Naming Files,「ファイルのネーミング」}} を参照してください。


!{{anchor Common Direcotry Operations}}共通ディレクトリ操作 {{goto top,^TOP^}}

{{goto Table 6.3,表 6.3}} で示されているように、VFS マネージャはデスクトップ コンピュータとそれよりも大きなコンピュータ システムでおなじみの標準ディレクトリ操作のすべてを提供します。これらの関数はあなたの予想以上の機能を持っているため、その使用方法についての詳細はここでは扱いません。パラメータ、返り値、各関数の副作用については、''C/C++ Sync Suite Reference'' の [[第 10 章 「仮想ファイル システム マネージャ API」|C/C++ Sync Suite Reference601/10]] の中の各関数の説明を参照してください。

これらの関数の大半はディレクトリと同様にファイルにも適用されるということに注意してください。

{{anchor Table 6.3}}
'''表 6.3 共通ディレクトリ操作'''

,関数,説明
,"{{goto DirCreate,DirCreate()}}",新しいディレクトリを作成します。
,"{{goto FileDelete,FileDelete()}}",与えられたパスでディレクトリを削除します。
,"{{goto FileRename,FileRename()}}",ディレクトリをリネームします。
,"{{goto FileOpen,FileOpen()}}",指定されたディレクトリをオープンします。
,"{{goto FileClose,FileClose()}}",指定されたディレクトリをクローズします。
,"{{goto FileGetAttributes,FileGetAttributes()}}","オープンされているディレクトリの属性 - hidden, Read-only, システム, アーカイブ ビット を含む - を取得します。属性フィールドを形成するビットについては、''C/C++ Sync Suite Reference'' の {{goto File and Directory Attributes|C/C++ Sync Suite Reference601/10}} を参照してください。"
,"{{goto FileSetAttributes,FileSetAttributes()}}","オープンされているディレクトリの属性 - hidden, Read-only, システム, アーカイブ ビットを含む - をセットします。"
,"{{goto FileGetDate,FileGetDate()}}",オープンされているディレクトリの作成日付、変更日付、最終アクセス日付を取得します。
,"{{goto FileSetDate,FileSetDate()}}",オープンされているディレクトリの作成日付、変更日付、最終アクセス日付をセットします。


!{{anchor Enumeration the Files in a Direcotry}}ディレクトリ内のファイルの列挙 {{goto top,^TOP^}}

あるディレクトリ内のファイルの列挙は {{goto VFSDirEntryEnumerate,VFSDirEntryEnumerate()|C/C++ Sync Suite Reference601/10}} 関数によって行われます。{{goto Listing 6.5,コード 6.5}} はこの関数の使用例を示しています。{{span style='color:blue;font-family:monospace;',volRefNum}} は以下のコードに先立って宣言、初期化されていなければなりません。

{{anchor Listing 6.5}}
'''コード 6.5 ディレクトリの内容の列挙'''

 // Open the directory and iterate through the files in it.
 // volRefNum must have already been defined.
 FileRef dirRef;
 
 err = VFSFileOpen (volRefNum, "/", vfsModeRead, &dirRef);
 if(err == errNone) {
   // Iterate through all the files in the open directory
   UInt32 fileIterator;
   FileInfoType fileInfo;
   char *fileName = new char[256];   // Should check for err.
 
   fileInfo.nameP = fileName;        // Point to local buffer.
   fileInfo.nameBufLen = sizeof(fileName);
   fileIterator = expIteratorStart;
   while (fileIterator != expIteratorStop) {
     // Get the next file
     err = VFSDirEntryEnumerate(dirRef, &fileIterator,
                                 &fileInfo);
     if(err == errNone) {
       // Process the file here.
     }
   } else {
     // Handle directory open error here.
   }
   delete [] fileName;
 }

ループしている最中の各ループで、{{span style='color:blue;font-family:monospace;',VFSDirEntryEnumerate()}} は {{goto FileInfoType,FileInfoType|C/C++ Sync Suite Reference601/10}} を目下列挙されているファイルに一致するようにセットします。あなたがファイル名を欲しいと思う場合、{{span style='color:blue;font-family:monospace;',FileInfoType}} に容量を割り当てるだけでは十分ではありません; あなたはさらにファイル名のためのバッファを割り当て、そのバッファへの適切なポインタを {{span style='color:blue;font-family:monospace;',FileInfoType}} 構造体の中にセットし、そのバッファの長さを指定しなければなりません。{{span style='color:blue;font-family:monospace;',FileInfoType}} 内でカプセル化されている他の唯一の情報はファイルの属性なので、たいていのコンジットはファイル名も知りたいと望みます。


!{{anchor Determining the Default Directory for a Particular File Type}}ある特定のファイル タイプのためのデフォルト ディレクトリの決定 {{goto top,^TOP^}}

{{goto Standard Directories,「標準ディレクトリ」}}で説明したように、Palm OS の拡張能力は MIME タイプやファイル拡張子を特定のディレクトリ名にマップするメカニズムを含みます。このメカニズムはスロット ドライバで特有です; ある画像は Memory Stick の "{{span style='color:blue;font-family:monospace;',/Images}}" ディレクトリに保存されるかも知れず、また MMC カードでは "{{span style='color:blue;font-family:monospace;',/DCIM}}" ディレクトリに保存されるかもしれません。VFS マネージャは、あなたのコンジットが与えられたファイル拡張子または MIME タイプに対するある特定のボリュームでのデフォルト ディレクトリを取得することを可能にする関数を含みます; ハンドヘルド アプリケーションとは異なり、コンジットはそれら自体のデフォルト ディレクトリを登録、登録解除することはできません。

{{goto VFSGetDefaulteDirectory,VFSGetDefaultDirectory()|C/C++ Sync Suite Reference601/10}} 関数はボリューム参照とファイル拡張子または MIME タイプを保持している文字列を受け取り、対応するデフォルト ディレクトリへのフル パスを保持している文字列を返します。ファイル タイプを指定するとき、"image/jpeg", "text/plain", "audio/basic" などのMIME メディア タイプ/サブタイプのペアか、"{{span style='color:blue;font-family:monospace;',.jpeg}}" などのファイル拡張子のどちらかを提供します。そのような他の VFS マネージャ関数の大半と同様に、あなたはあらかじめ返されるパスを保持するためのバッファを割り当てておかなければなりません。そのバッファへのポインタとともにそのバッファの長さを提供します。返り時には、その長さはパスの実際の長さを示すように更新され、その長さは元々指定されていたバッファの長さを超えることはありません。

与えられたファイル タイプのための登録されるデフォルト ディレクトリは "root" デフォルト ディレクトリとなることが意図されています。与えられたデフォルト ディレクトリが 1 つまたは複数のサブディレクトリを持つ場合、コンジットはさらにそれらのサブディレクトリでも適合するタイプのファイルを探すべきです。

{{span style='color:blue;font-family:monospace;',VFSGetDefaultDirectory()}} は、あなたがある特定のファイル拡張子に関連付けられたディレクトリを決定することを可能にします。しかしながら、デフォルト ディレクトリにマップされているファイル拡張子すべてのリストを取得する方法はありません。


!{{anchor Default Directories Registered at Initialization}}初期化時に登録されるデフォルトのディレクトリ {{goto top,^TOP^}}

VFS マネージャは {{goto Table 6.4,表 6.4}} のファイル タイプを {{span style='color:blue;font-family:monospace;',expMediaType_Any}} メディア タイプ下に登録します。与えられたメディア タイプのデフォルト ディレクトリがスロット ドライバによって登録されていない場合、{{goto VFSGetDefaultDirecory,VFSGetDefaultDirectory()|C/C++ Sync Suite Reference601/10}} はこのメディア タイプに対して登録されているデフォルト ディレクトリを使用します。

{{anchor Table 6.4}}
'''表 6.4 デフォルト ディレクトリ登録'''

,ファイル タイプ,パス
,"{{span style='color:blue;font-family:monospace;',.prc}}","{{span style='color:blue;font-family:monospace;',/PALM/Launcher/}}"
,"{{span style='color:blue;font-family:monospace;',.pdb}}","{{span style='color:blue;font-family:monospace;',/PALM/Launcher/}}"
,"{{span style='color:blue;font-family:monospace;',.pqa}}","{{span style='color:blue;font-family:monospace;',/PALM/Launcher/}}"
,"{{span style='color:blue;font-family:monospace;',application/vnd.palm}}","{{span style='color:blue;font-family:monospace;',/PALM/Launcher/}}"
,"{{span style='color:blue;font-family:monospace;',.jpg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.jpeg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',image/jpeg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.gif}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',image/gif}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.qt}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.mov}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',video/quicktime}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.avi}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',video/x-msvideo}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.mpg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.mpeg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',video/mpeg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.mp3}}","{{span style='color:blue;font-family:monospace;',/AUDIO/}}"
,"{{span style='color:blue;font-family:monospace;',.wav}}","{{span style='color:blue;font-family:monospace;',/AUDIO/}}"
,"{{span style='color:blue;font-family:monospace;',audio/x-wav}}","{{span style='color:blue;font-family:monospace;',/AUDIO/}}"

PalmSource 社によって提供される SD スロット ドライバは {{goto Table 6.5,表 6.5}} のファイル タイプを登録します。なぜなら、このスロット ドライバはこれらのファイル タイプに対する適切は指定を行うためです。

{{anchor Table 6.5}}
'''表 6.5 SD スロット ドライバによって登録されるディレクトリ'''

,ファイル タイプ,パス
,"{{span style='color:blue;font-family:monospace;',.jpg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.jpeg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',image/jpeg}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.qt}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.mov}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',video/quicktime}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',.avi}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"
,"{{span style='color:blue;font-family:monospace;',video/x-msvideo}}","{{span style='color:blue;font-family:monospace;',/DCIM/}}"

この SD スロット ドライバによって登録されるディレクトリはすべて VFS マネージャによって行われるデフォルトの登録の複写ですが、SD の仕様ではそれらを明示的にインクルードするためそれらのディレクトリは SD メディア タイプ下にも登録されます。

Memory Stick などの異なるメディア タイプをサポートする他の Palm ハンドヘルド製造者によって作成されたスロット ドライバは、それらのメディアの仕様に合ったデフォルト ディレクトリを登録します。これらの登録のいくつかのケースは {{span style='color:blue;font-family:monospace;',expMediaType_Any}} メディア タイプ登録をオーバライドするかもしれませんし、いくつかのケースは {{span style='color:blue;font-family:monospace;',expMediaType_Any}} メディア タイプ登録に以前は登録されていなかったファイル タイプを追加するかもしれません。

これらの登録はアプリケーション開発者を手助けすることを意図しています。しかしながら、あなたはそれらに従う必要は必ずしもありません。あなたはそれらの登録を無視することもできますが、それらに従うことによってアプリケーションと他のデバイス間の相互運用性を高めることができます。例えば、メディアの仕様に従うデジタル カメラは画像を画像のフォーマットとメディア タイプに適合する登録ディレクトリ (またはそのサブディレクトリ) に保存します。フォーマットのための登録ディレクトリを参照することによって、ハンドヘルドの画像ビューア アプリケーションはカード全体を検索することなしに簡単に画像を見つけることができます。さらに、これらの登録は異なる開発者がファイル タイプ指定に対して異なるパスをハード コードすることを防ぐのに役立ちます。それゆえ、あるユーザが 2 つの異なる画像ビューア アプリケーションを持っている場合、両方ともが同じ場所を参照して同じ画像セットを見つけます。

初期化時にこれらのファイル タイプを登録することは、デフォルトのカード インストール コンジット ({{span style='color:blue;font-family:monospace;',CardInst.dll}}) がこれらのタイプのファイルを拡張カードに転送することを可能にします。HotSync の間に、登録されたタイプのファイルは直接カード上の指定されたディレクトリに置かれます。


!!{{anchor Custom Calls}}カスタム呼び出し {{goto top,^TOP^}}

ファイル システムを認識する機能は、VFS マネージャと拡張マネージャに含まれる API ではカバーされないかもしれません。VFS マネージャは、単に開発者に基本的なファイル システムへのアクセスを提供するために存在する関数を含みます。この関数 - {{goto VFSCustomControl,VFSCustomControl()|C/C++ Sync Suite Reference601/10}} は登録されているクリエイタ ID と実行される操作を特定するセレクタをとります。{{span style='color:blue;font-family:monospace;',VFSCustomControl()}} はある特定のファイル システムに指定された操作を実行するようリクエストするか、必要な操作に応じることができるファイル システムの場所を見つけるために現在登録されているすべてのファイル システムを反復処理を行うことができます。

パラメータは単一の {{span style='color:blue;font-family:monospace;',VFSCustomControl()}} パラメータを通してファイル システムのカスタム関数に渡されます。このパラメータ - {{span style='color:blue;font-family:monospace;',pDataBuf}} - は {{span style='color:blue;font-family:monospace;',void *}} として宣言されているため、あなたはいずれのタイプの構造体へのポインタでも渡すことができます。2 番目のパラメータ - {{span style='color:blue;font-family:monospace;',valueLenP}} - は、あなたが {{span style='color:blue;font-family:monospace;',pDataBuf}} の長さを指定することを許可します。これらの値は単にファイル システムに渡されるものであり、これらは実際は基本的なファイル システムしだいであるということに注意してください。更なる情報は、''C/C++ Sync Suite Reference'' の {{goto VFSCustomControl,VFSCustomControl()|C/C++ Sync Suite Reference601/10}} の説明を参照してください。

{{span style='color:blue;font-family:monospace;',VFSCustomControl()}} は、ある特定のファイル システムによって提供される非標準の機能にアクセスすることを可能にするために設計されているため、ファイル システムが提供するすべてのカスタム関数のリストは、そのファイル システムとともに提供されるドキュメントを参照してください。

この節の残りでは、{{goto Custom I/O,「カスタム I/O」}} について説明します。


!{{anchor Custom I/O}}カスタム I/O {{goto top,^TOP^}}

拡張マネージャと VFS マネージャが補助記憶装置のための高レベル OS サポートを提供する一方、それらは raw (低レベル、未加工の) インターフェイス以上のものをカスタム I/O アプリケーションに提供しようとはしません。拡張メカニズムのすべての使用方法を予測することは不可能なため、拡張マネージャと VFS マネージャは単にカスタム ハードウェアの事項から逃れようとするだけです。

拡張マネージャは挿入と取り外し通知を提供し、ドライバのロードとアンロードを行うことができます。他の一切のことはアプリケーション開発者に責任があります。PalmSource 社は、Palm OS ライセンシによって拡張可能な共通拡張スロット ドライバ API を定義しています。この API は、拡張マネージャ、VFS マネージャ、ファイル システム ライブラリが必要とすることすべてをサポートするために設計されています。しかしながら、I/O デバイスと通信する必要のあるコンジットは提供される API 以上のものを必要とするかもしれません。そのようなコンジットは可能であればどこででもスロット カスタム呼び出し - これは拡張スロット ドライバへの直接アクセスを提供します - を使用すべきです。スロット ドライバとスロット カスタム呼び出しについての更なる情報は、ライセンシに提供される開発者用ドキュメントを参照してください。ある特定の I/O デバイスによって使用可能になる関数とそれらの関数にアクセスする方法についてのドキュメントに関しては、その I/O デバイスの製造者にコンタクトをとってください。

::NOTE
:::カスタム I/O デバイスが HotSync クレドルと同じコネクタ経由でハンドヘルドと接続する場合、当然そのカスタム I/O デバイスはクレドル ベース HotSync の最中はアクセスできません。しかしながら、HotSync がワイヤレス接続 - 例えば赤外線接続 - の場合、コンジットはそのようなデバイスにアクセスすることができます。


!!{{anchor Debugging}}デバッグ {{goto top,^TOP^}}

Palm OS シミュレータは VFS マネージャの拡張能力をサポートします。シミュレータはホスト ファイル システム上のディレクトリをボリュームとして仮想ファイル システムに提供します。あなたはこのディレクトリをあなたのホスト システムに実装させ、ボリューム マウントをシミュレートすることができます。シミュレートされている拡張カードの内容への変更はホスト上のディレクトリを調べることによって検証することができます。

Palm OS シミュレータのコンフィグレーションと操作についての更なる情報は、''Palm OS Cobalt Simulator Guide or Testing with Palm OS Garnet Simulator'' を参照してください。シミュレータでの HotSync の実行についての情報は、''Conduit Development Utilities Guide'' の [[第 8 章 「Palm OS シミュレータとの同期」|Conduit Development Utilities Guide/8]] を参照してください。(訳者: 訳者の自作ドキュメント [[「Palm OS Simulator での HotSync 使用のための設定」|Settings on Palm OS Simulator for using HotSync]] も参照してください。)


!!{{anchor Summary of Expansion and VFS Managers}}拡張マネージャと VFS マネージャの要約 {{goto top,^TOP^}}

*拡張マネージャ関数
**{{goto ExpCardInfo,ExpCardInfo()|C/C++ Sync Suite Reference601/9}}
**{{goto ExpCardPresent,ExpCardPresent()|C/C++ Sync Suite Reference601/9}}
**{{goto ExpSlotEnumerate,ExpSlotEnumerate()|C/C++ Sync Suite Reference601/9}}
**{{goto ExpSlotMediaType,ExpSlotMediaType()|C/C++ Sync Suite Reference601/9}}

*VFS マネージャ関数
**ファイルに対する操作
***{{goto VFSFileClose,VFSFileClose()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileCreate,VFSFileCreate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileDelete,VFSFileDelete()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileEOF,VFSFileEOF()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileGet,VFSFileGet()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileGetAttributes,VFSFileGetAttributes()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileGetDate,VFSFileGetDate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileOpen,VFSFileOpen()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFilePut,VFSFilePut()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileRead,VFSFileRead()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileRename,VFSFileRename()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileResize,VFSFileResize()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileSeek,VFSFileSeek()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileSetAttributes,VFSFileSetAttributes()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileSetDate,VFSFileSetDate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileSize,VFSFileSize()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileTell,VFSFileTell()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileWrite,VFSFileWrite()|C/C++ Sync Suite Reference601/10}}
**ディレクトリに対する操作
***{{goto VFSDirCreate,VFSDirCreate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSDirEntryEnumerate,VFSDirEntryEnumerate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileClose,VFSFileClose()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileDelete,VFSFileDelete()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileGetAttributes,VFSFileGetAttributes()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileGetDate,VFSFileGetDate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileOpen,VFSFileOpen()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileRename,VFSFileRename()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileSetAttributes,VFSFileSetAttributes()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSFileSetDate,VFSFileSetDate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSGetDefaultDirectory,VFSGetDefaultDirectory()|C/C++ Sync Suite Reference601/10}}
**ボリュームに対する操作
***{{goto VFSVolumeEnumerate,VFSVolumeEnumerate()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSVolumeFormat,VFSVolumeFormat()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSVolumeGetLabel,VFSVolumeGetLabel()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSVolumeInfo,VFSVolumeInfo()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSVolumeSetLabel,VFSVolumeSetLabel()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSVolumeSize,VFSVolumeSize()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSSupport,VFSSupport()|C/C++ Sync Suite Reference601/10}}
**その他の関数
***{{goto VFSCustomControl,VFSCustomControl()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSExportDatabaseToFile,VFSExportDatabaseToFile()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSImportDatabaseFromFile,VFSImportDatabaseFromFile()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSGetAPIVersion,VFSGetAPIVersion()|C/C++ Sync Suite Reference601/10}}
***{{goto VFSSupport,VFSSupport()|C/C++ Sync Suite Reference601/10}}
{{div_end}}

{{div_begin "style='border-top-style:solid;border-top-width:1px;border-top-color:silver;'"}}
[[← 5 章に戻る|C/C++ Sync Suite Companion601/5]] [[↑トップへ|C/C++ Sync Suite Companion601]] [[7 章に進む →|C/C++ Sync Suite Companion601/7]]
{{div_end}}