この文書は, 財団法人光産業技術振興協会(OITDA)の1998〜2000年度の成果をもとに工業標準化の促進に関連して特に重要と判断される技術情報をまとめ, 日本工業標準調査会の審議を経て, 標準仕様書(TS)として公表するものである。
この標準仕様書(TS)は, 標準仕様書TS X 0035:2000 [ユニバーサルディスクフォーマット(UDF) 2.00]及び標準仕様書TS X 0040:2005 [ユニバーサルディスクフォーマット(UDF)のセキュリティ拡張]に適合するファイルを対象とし, 主としてそのファイルに対する書込み及び読出しの操作を行うための応用プラグラムインタフェース(API)を規定する。
次の規格などは,この標準仕様書(TS)に引用されることによって,この標準仕様書(TS)の規定の一部を構成する。
JIS X 0607:2001 非逐次記録を用いる追記形及び書換形の情報交換用媒体のボリューム及びファイルの構造
備考1 ISO/IEC 13346:1999 Volume and file structure of write-once and rewritable media using non-sequential recording for information interchange が, この規格に一致している。
備考2 ECMA 167 3rd Edition, Volume and file structure of write-once and rewritable media using non-sequential recording for information interchange も, この規格に一致している。
JIS X 3030-1994 移植可能なオペレーティングシステムのインタフェース(POSIX) 第1部 応用プログラム向けのインタフェース(API) [プログラム言語C]
備考 ISO/IEC 9945-1:1990 Portable Operating System Interface (POSIX) -- Part 1: System Application Program Interface (API) [C Language] が,この規格に一致している。
TS X 0035:2000 ユニバーサルディスクフォーマット(UDF) 2.00
備考1 Universal Disk Format Specification Revision 2.00, OSTA, 1998-04 が, この規定に一致している。
備考2 Universal Disk Format Specification Revision 2.01, OSTA, 2000-03 は, この規定の一部を修正している。
TS X 0040:2005 ユニバーサルディスクフォーマット(UDF)のセキュリティ拡張
この標準仕様書(TS)では, TS X 0035(UDF 2.00)及びTS X 0040(UDFのセキュリティ拡張)での定義を適用する。
関数が誤り番号として返す記号定数の記法は, JIS X 3030の2.4(誤り番号)に従う。
表5.1に示す操作に関しては,JIS X 3030において規定されるAPIに従う。
項目 | 操作 | 関数名 |
---|---|---|
5.1.2 | ディレクトリ操作 |
opendir() readdir() rewinddir() closedir() |
5.2.1 | 現行の作業ディレクトリの変更 | chdir() |
5.2.2 | 作業ディレクトリのパス名の取得 | getcwd() |
5.3.1 | ファイルのオープン | open() |
5.3.2 | 新規ファイルの生成又は既存のファイルの書換え | creat() |
5.3.3 | ファイル生成マスクの設定 | umask() |
5.3.4 | ファイルのリンク | link() |
5.4.1 | ディレクトリの生成 | mkdir() |
5.4.2 | 特殊ファイルの生成 | mkfifo() |
5.5.1 | ディレクトリエントリの削除 | unlink() |
5.5.2 | ディレクトリの削除 | rmdir() |
5.5.3 | ファイル名の変更 | rename() |
5.6.2 | ファイル状態の取得 |
stat() fstat() |
5.6.3 | ファイルのアクセス許可条件の試験 | access() |
5.6.4 | ファイルモードの変更 | chmod() |
5.6.5 | ファイルの所有者及びグループの変更 | chown() |
5.6.6 | ファイルのアクセス時刻及び更新時刻の設定 | utime() |
6.3.1 | ファイル記述子の解放 | close() |
6.4.1 | ファイルからの読出し | read() |
6.4.2 | ファイルへの書込み | write() |
6.5.2 | ファイルの制御 | fcntl() |
6.5.3 | 読出し・書込みのファイルオフセットの再位置付け | lseek() |
UDF固有の操作に関するAPIを規定する。
ヘッダ<udf.h>は, UDFファイルシステム固有関数が扱う構造体定義を含む。各構造体定義の詳細については, TS X 0035を参照されたい。
udfgetent()関数によって返されるUDFファイルエントリ構造体udfentの定義を含む。 表6.1〜6.4に関連する構造体の定義を示す。
メンバの型 | メンバ名 | 意味 |
---|---|---|
tag | desc_tag | 記述子のタグID(261:基本, 266:拡張) |
Uint32 | uid | ファイルの所有者の利用者ID |
Uint32 | gid | ファイルの所有者のグループID |
Uint32 | perm | アクセス許可条件 |
Uint16 | file_link_cnt | リンク数 |
Uint8 | rec_fmt | レコード形式 |
Uint8 | rec_disp_attr | レコード表示属性 |
Uint32 | rec_len | 各レコード長(バイト数) |
Uint64 | info_len | ファイル長(バイト数) |
Uint64 | obj_size | 全ストリーム込みのファイル長(バイト数) |
Uint64 | lblk_rec | 記録された論理ブロック数 |
timestamp | acstime | ファイルの参照日時 |
timestamp | modtime | ファイルの更新日時 |
timestamp | crttime | ファイルの生成日時 |
timestamp | atrtime | ファイル属性の更新日時 |
Uint32 | checkpoint | チェックポイント |
regid | impl_id | 実装ID |
Uint64 | uniq_id | 一意ID |
メンバの型 | メンバ名 | 意味 |
---|---|---|
Uint16 | tag_id | タグID |
Uint16 | desc_ver | 記述子の版数 |
Uint8 | tag_chksum | udftag構造体のチェックサム |
Uint8 | pad1 | 予約(#00) |
Uint16 | tag_serno | 記述子集合のID |
Uint16 | desc_crc | この記述子のCRC |
Uint16 | desc_crc_len | CRC長 |
Uint16 | tag_loc | この記述子の位置(論理ブロック番号) |
メンバの型 | メンバ名 | 意味 |
---|---|---|
Uint16 | type_timezone | 解釈(Type=0:UTC, 1:local, 2:送り手と受け手とで合意が必要) |
Uint16 | year | 年(1〜9999) |
Uint8 | month | 月(1〜12) |
Uint8 | day | 日(1〜31) |
Uint8 | hour | 時(0〜23) |
Uint8 | min | 分(0〜59) |
Uint8 | sec | 秒(type 2:0〜60, 他:0〜59) |
Uint8 | centisec | 100分の1秒(0〜99) |
Uint8 | microsec100 | 100マイクロ秒(0〜99) |
Uint8 | microsec | マイクロ秒(0〜99) |
メンバの型 | メンバ名 | 意味 |
---|---|---|
Uint8 | flags | 属性 |
Uint8[23] | id | 実装識別子 |
Uint8[8] | id_suffix | 付加情報 |
関数udfgetxattr()によって返される拡張属性構造体udfxattrの定義を含む。表6.5に構造体の定義を示す。
メンバの型 | メンバ名 | 意味 |
---|---|---|
Uint32 | attr_type | 拡張属性の種別 |
Uint8 | attr_subtype | 拡張属性の副種別 |
Uint8 | pad1 | 予約(#00) |
Uint32 | attr_len | 拡張属性全体の大きさ |
Uint8[] | attr_data | 拡張属性データ部 |
関数udfsettime()によって設定する日時構造体udftimeの定義を含む。表6.6に構造体の定義を示す。
メンバの型 | メンバ名 | 意味 |
---|---|---|
timestamp | acstime | ファイルの参照日時 |
timestamp | modtime | ファイルの更新日時 |
timestamp | crttime | ファイルの生成日時 |
timestamp | atrtime | ファイル属性の更新日時 |
関数 udfsetperm()によって設定する許可条件の値は, 次のマスク及びビットによって符号化される。
S_IXWRADO | 他人に対する実行,書込み,読出し,属性変更及び削除の許可条件マスク | |||||||||||||||
|
S_IXWRADG | グループに対する実行,書込み,読出し,属性変更及び削除の許可条件マスク | |||||||||||||||
|
S_IXWRADU | 本人に対する実行,書込み,読出し,属性変更及び削除の許可条件マスク | |||||||||||||||
|
udfgetent()関数
#include <udf.h>
int udfgetent(int fildes, struct udfent *buf);
udfgetent()関数は, オープンファイル記述子fildesで指定されたファイルに関するファイルエントリ情報を取得し, 引き数bufで指定された領域に書き込む。
UDFファイルエントリ情報の形式には, ファイルエントリ型及び拡張ファイルエントリ型がある。この関数が返却値を返した後, desc_tag構造体中のtag_idの内容を参照して, 値が261の場合にはファイルエントリ型が, 値が266の場合には拡張ファイルエントリ型が設定されていることを意味する。obj_size及びcrttimeは, 拡張ファイルエントリ型の場合だけ値が設定される。
成功時に値0を返す。そうでなければ-1を返し, errnoに失敗を示す値が設定される。
次の状態が発生した場合, udfgetent()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子でない。
udfgetxattr()関数
#include <udf.h>
int udfgetxattr(int fildes, Uint32 atype, struct udfxattr *buf);
udfgetxattr()関数は,オープンファイル記述子fildesで指定されたファイルに関する拡張属性情報のうち, 引き数atypeで指定された属性種別に合致する拡張属性情報を取得し, 引き数 bufで指定された領域に書き込む。
atypeに0を指定すると, すべての拡張属性情報を取得する。bufに0を指定すると, atypeで指定された属性種別に合致する拡張属性情報の大きさ(バイト数)が関数の返却値として返されるので, あらかじめ必要な領域の大きさが分からない場合に利用できる。atype及びbufに0を指定すると, すべての拡張属性情報の領域の総和が関数の返却値として返される。
bufの値が非0の場合には, 成功時に値0を返す。そうでなければ-1を返し, errnoに失敗を示す値が設定される。
bufの値が0の場合には, 指定された属性種別をもつ拡張属性領域の大きさをバイト数で返す。指定された属性種別が見つからなかった場合には, -1を返す。
次の状態が発生した場合, udfgetxattr()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
[EINVAL] atypeで指定された値が, 妥当な属性種別ではない。
udfsetperm()関数
#include <udf.h>
int udfsetperm(int fildes, Uint32 perm);
udfsetperm()関数は, オープンファイル記述子fildesで指定されたファイルのファイルエントリ又は拡張ファイルエントリ中に設定されている許可条件を,引き数permで指定された許可条件で置き換える(6.1.4を参照)。
成功時に値0を返す。そうでなければ-1を返し, errnoに失敗を示す値が設定される。
次の状態が発生した場合, udfsetperm()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
[EPERM] 呼出し元プロセスが, 適切な権限をもっていない。
udfsettime()関数
#include <udf.h>
int udfsettime(int fildes, struct udftime *timebuf);
udfsettime()関数は, オープンファイル記述子fildesで指定されたファイルのファイルエントリ又は拡張ファイルエントリ中に設定されている日時情報を, 引き数配列timebufで指定された日時で置き換える。ファイルの所有者及び適切な権限をもつプロセスだけが, udfsettime()関数の使用を許される。
成功時に値0を返す。そうでなければ-1を返し, errnoに失敗を示す値が設定される。
次の状態が発生した場合, udfsettime()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
[EPERM] 呼出し元プロセスが, 適切な権限をもっていない
ここで規定する関数は, TS X 0040 [ユニバーサルディスクフォーマット(UDF)のセキュリティ拡張]が規定する操作を実行する。
ヘッダ<udfse.h>は, セキュリティ拡張操作関数が扱う構造体定義を含む。
segetlog()関数によって返されるアクセスログ記述子構造体aldescの定義を含む。表7.1及び表7.2に関連する構造体の定義を示す。
メンバの型 | メンバ名 | 意味 |
---|---|---|
timestamp | optime | 操作日時 |
envspec | envspec | 利用環境 |
Uint32 | op | 操作 |
Uint32 | uidtype | 利用者識別子の種別 |
Uint32 | uidlen | 利用者識別子の長さ |
Uint8[] | uid | 利用者識別子 |
メンバの型 | メンバ名 | 意味 |
---|---|---|
Uint8[64] | systemid | システム識別子 |
Uint8[64] | deviceid | 記憶装置識別子 |
Uint8[192] | mediaid | 記憶媒体識別子 |
Uint8[16] | lsn | 論理セクタ番号 |
Uint8[48] | padding | 将来拡張用に予約 |
ここで規定する関数は,種別1アクセスログストリーム(TS X 0040の4.1.2.1を参照)を扱う操作を実行する。
segetlog()関数
#include <udfse.h>
int segetlog(int fildes, int logno, int loglen, struct aldesc *logbuf);
ログを読み取り, aldesc構造体(7.1.1を参照)に記憶して返却する。引き数lognoは読出すログのログ番号を, 引き数logbufはログの読出し用のバッファを,引き数loglenはaldesc構造体の長さを, 設定する。
成功時には値0を返す。そうでなければ値-1を返し, errnoに失敗を示す値が設定される。失敗時には, logbufの内容は保証されない。
次の状態が発生した場合, segetlog()関数は-1を返し, errnoに対応する値が設定される。
[EINVAL] 引き数loglenが, aldesc構造体の大きさよりも小さい。
ここで規定する関数は, 種別1ライセンスストリーム(TS X 0040の5.1.1.1を参照)を扱う操作を実行する。
segetlicenselist()関数
int segetlicenselist(int fildes, int bufnum, int buf[], int *num);
ライセンスが設定されている操作の一覧を取得する。この機能は, コンテンツごとに使用する。引き数fildesはコンテンツのオープンファイル記述子を, 引き数bufnumはライセンス一覧取得用のバッファ長を, 引き数bufはライセンス一覧取得用のバッファを, 引き数numは登録済み操作数を, 設定する。
成功時には値0を返す。そうでなければ値-1を返し, errnoに失敗を示す値が設定される。失敗時には, bufの内容は保証されない。
次の状態が発生した場合, segetlicenselist()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
seaddlicense()関数
int seaddlicense(int fildes, int operation, int buflen, char *bufp);
ライセンスを追加する。この機能はコンテンツごとに, かつ操作ごとに使用する。引き数fildesはコンテンツのオープンファイル記述子を, 引き数operationは操作番号(1:Play, 2:将来拡張用)を, 引き数buflenはライセンス設定用のバッファ長を,引き数bufpはライセンス設定用のバッファを, 設定する。
成功時には値0を返す。そうでなければ値-1を返し, errnoに失敗を示す値が設定される。失敗時には, bufの内容は保証されない。
次の状態が発生した場合, seaddlicense()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
[EINVAL] operationで指定された値が, 妥当な操作番号ではない。
sedellicense()関数
int sedellicense(int fildes, int operation);
ライセンスを削除する。この機能はコンテンツごとに, かつ操作ごとに使用する。引き数fildesはコンテンツのオープンファイル記述子を, 引き数operationは操作番号(1:Play, 2:将来拡張用)を設定する。
成功時には値0を返す。そうでなければ値-1を返し, errnoに失敗を示す値が設定される。失敗時には, bufの内容は保証されない。
次の状態が発生した場合, sedellicense()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
[EINVAL] operationで指定された値が, 妥当な操作番号ではない。
sesetlicense()関数
int sesetlicense(int fildes, int operation);
必要とされるすべてのデバイスで, 順次ライセンスに適合するかどうかのチェックを受ける。すべてのチェックにパスすると, 最後にチェックしたデバイスに暗号化コンテンツを復号するための鍵が設定される。この機能はコンテンツごとに, かつ操作ごとに使用する。引き数fildesはコンテンツのオープンファイル記述子を, 引き数operationは操作番号(1:Play, 2:将来拡張用)を, 設定する。
成功時には値0を返す。そうでなければ値-1を返し, errnoに失敗を示す値が設定される。失敗時には, bufの内容は保証されない。
次の状態が発生した場合, sesetlicense()関数は-1を返し, errnoに対応する値が設定される。
[EBADF] 引き数fildesが, 妥当なオープンファイル記述子ではない。
[EINVAL] operationで指定された値が, 妥当な操作番号ではない。