4

読んman 3 ftwでみると、「POSIX.1-2008 は ftw() を古いものとしてマークしています」。
今、私は心配しており、「素敵なプログラマー」になりたいと思っていますftw()。それでも、現在「最新」である他に何を使用する必要があるかを見つけるのに苦労していますftw()

許可されれば、2 つのサブ質問に特に関心があります。

  1. まだ使えftw()ますか?
  2. そうすることに伴うリスクを見積もる方法はありますか?
  3. 後継者は何ですかftw()

質問を改善するための提案をお待ちしておりますが、それが挑戦的であり、質問をうまく作成しようとしたことを考えると、喜んで助けられ、受け入れられます。

4

1 に答える 1

4

はい、廃止された関数の使用は避けるべきです。の場合ftw()、置換はnftw()次のとおりです。

int nftw(const char *path, int (*fn)(const char *,
       const struct stat *, int, struct FTW *), int fd_limit, int flags);

オープングループから:

関数は、ftw()その操作中に動的ストレージを割り当てる場合があります。によってポイントされた関数または割り込みルーチンによってftw()強制的に終了された場合、longjmp()またはそれらによって実行されている場合、そのストレージを解放する機会がないため、永続的に割り当てられたままになります。割り込みを処理する安全な方法は、割り込みが発生したという事実を保存し、次の呼び出しでゼロ以外の値を返す関数が指すように手配することです。siglongjmp()fnftw()fn

アプリケーションは、廃止されたnftw()関数の代わりに関数を使用する必要がありftw()ます。

于 2013-10-27T12:12:52.627 に答える