2011-11-07 95 views
4

有没有办法将参数发送到ftw()以用于处理路径上的每个文件/目录?由于多线程问题,将有关论点作为全局变量有点困难,即,所有线程都可以看到全局值,这是错误的。将参数发送到ftw()

回答

5

正确设计的C回调接口有一个void*参数,您可以使用该参数将周围代码中的任意数据传递到回调函数中。 [n]ftw没有这样的说法,所以你有点儿小溪。

如果您的编译器支持线程局部变量(__thread存储区分符),则可以使用它们而不是全局变量;这将工作,但并不比全局更加整洁。

如果您的C库有fts函数系列,请改用它们。它们适用于大多数现代Unix(包括Linux,OSX和最近的* BSD)以及gnulib has a fallback implementation

+0

谢谢...会给我一个尝试 –

+0

'__thread'是非标准的,不可移植的,但你可以改为使用'pthread_key_create'和'pthread_setspecific' /'pthread_getspecific'。 –