0

このように nftw を使用してディレクトリをトラバースしながら、

nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS)

nftw は、ディレクトリに遭遇したときに rm 関数の tflag パラメータに値 5 を渡しています。ftw.h ヘッダーは、tflag パラメーターの 4 つの値 (0 ~ 3) を持つ列挙型のみを指定します。このうち、FTW_D または 1 がディレクトリの適切な値です。fpath 値は、すべてのインスタンスで正しいようです。

だから私の質問はこれです。tflag に 1 ではなく 5 を渡すのはなぜですか? また、tflag の 5 はどういう意味ですか?

編集:

値は実際にはFTW_DP(ディレクトリ、すべてのサブディレクトリがアクセスされました)であり、これは私が気付かなかった環境依存部分で以下に定義されていました。

4

1 に答える 1

2

の POSIX 仕様では、関数nftw() のフラグ引数は次のいずれかであると規定されています。rm

  • FTW_D オブジェクトはディレクトリです。
  • FTW_DNR オブジェクトは、読み取ることができないディレクトリです。fn 関数は、その子孫のいずれに対しても呼び出されません。
  • FTW_DP オブジェクトはディレクトリで、サブディレクトリがアクセスされています。(この条件は、FTW_DEPTH フラグが flags に含まれている場合にのみ発生します。)
  • FTW_F オブジェクトはディレクトリ以外のファイルです。
  • FTW_NS 適切な権限がないため、オブジェクトで stat() 関数が失敗しました。fn に渡される stat バッファは未定義です。その他の理由による stat() の失敗はエラーと見なされ、nftw() は -1 を返します。
  • FTW_SL オブジェクトはシンボリック リンクです。(この条件は、FTW_PHYS フラグがフラグに含まれている場合にのみ発生します。)
  • FTW_SLN オブジェクトは、既存のファイルを指定しないシンボリック リンクです。(この条件は、FTW_PHYS フラグがフラグに含まれていない場合にのみ発生します。)

システムを識別せず、標準では、呼び出された関数のフラグ引数に関連付ける番号を定義していないため、システムでの意味を誰も識別できません5。ただし、5値として信じがたいとは思われない十分なオプションがあります。

Mac OS X (10.9.5) では、値5は になりますFTW_SL。OSF に基づいた別のシステムでは、jedwardsコメントで値5が forFTW_DPであることを指摘しています5

于 2014-09-26T14:07:32.940 に答える