fdetach() - STREAMS ベースのファイル記述子からの名前の切り離し

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <stropts.h>

int fdetach(const char *path);

機能説明

fdetach() 関数は STREAMS ベースのファイルを、これが直前 の fattach() 呼び出しで接続されたファイルから切り離します。path 引数は接続された STREAMS ファイルのパス名を指します。 プロセスは適切な特権を持つか、またはファイルの所有者でなければなりません。fdetach() 呼び出しが正常終了すると、接続された STREAMS ファイルを 指名したすべてのパス名は、STREAMS ファイルが接続されたファイルを再び指名 するようになります。path でのその後のすべての操作は、基礎ファイルでの操作になり、STREAMS ファイルでの操作ではありません。

path で参照されるファイルに STREAMS ファイルが接続されている間に設定されたすべてのオープン・ファイル記述は、fdetach() が有効に実行された後でも、引き続き STREAMS ファイルを参照します。

オープン・ファイル記述子がないか、または STREAMS ファイルへの 参照がほかにない場合、fdetach() 呼び出しが正常終了すると、接続された ファイルに対して最後の close() を実行したのと同じ結果に なります。

戻り値

fdetach() は、正常終了時には 0 を戻します。

正常に実行されなかった場合、fdetach() は -1 を戻して、errno を次のいずれかの 値に設定します。
注: z/OS®UNIX サービスは、どのような STREAMS 装置または疑似装置も提 供しません。ファイルを STREAMS ベースのファイル記述子から fdetach() で切り離す ことはできません。詳細は、open() — ファイルのオープンを参照してください。
エラー・コード
説明
EACCES
検索許可はパス接頭部のコンポーネントで拒否されました。
EINVAL
path 引数は、現在接続されていないファイルの名前です。
ELOOP
path の解析中に検出されたシンボリック・リンクが多すぎます。
ENAMETOOLONG
パス名のサイズが PATH_MAX を超えるか、パス名のコンポーネ ントが NAME_MAX より長いか、シンボリック・リンクのパス名の解析で PATH_MAX を超える長さの中間結果が生成されました。
ENOENT
path のコンポーネントが既存ファイルの名前を指定していないか、または path が空ストリングです。
ENOTDIR
パス接頭部のコンポーネントがディレクトリーではありません。
EPERM
有効ユーザー ID は path の所有者でなく、プロセスは適切な特権を持っていません。

関連情報