2011-11-07 8 views
4

パス上の各ファイル/ディレクトリを処理するために引数をftw()に送る方法はありますか?引数がグローバル変数として関連するのは、マルチスレッドの問題、つまりグローバルな値がすべてのスレッドに見えて間違っているために、少し難しいです。ftwへの引数の送信

答えて

5

適切に設計されたCコールバックインターフェイスには、周囲のコードから任意のデータをコールバックに渡すために使用できるvoid*引数があります。 [n]ftwにはそのような議論がないので、あなたはちょっとした川です。

コンパイラがスレッドローカル変数(__thread記憶域指定子)をサポートしている場合は、それらをグローバルの代わりに使用できます。これはの作業ですが、実際にはグローバルよりはるかに丁寧です。

Cライブラリにftsファミリの機能がある場合は、その代わりに使用してください。それらは最新のUnix(Linux、OSX、最近* BSDを含む)やgnulib has a fallback implementationで利用できます。

+0

ありがとう... ftsを試してみます –

+0

'__thread'は非標準で移植性がありませんが、代わりに' pthread_key_create'と 'pthread_setspecific' /' pthread_getspecific'を使うことができます。 –

関連する問題