FUSE上下文是否保证是静态的?

时间:2015-07-23 14:07:53

标签: c pointers static fuse

在我的所有FUSE操作中,我在开始时都在做这样的事情:

ctx_t* ctx = (ctx_t*)(fuse_get_context()->private_data);

这有点令人厌倦,所以我把它培养成它自己的函数,其中指针是静态定义的。这是一个坏主意吗?我可以保证指针是静态的,所以这不会导致内存错误吗?

static ctx_t* get_ctx(void) {
  static ctx_t* ctx = NULL;

  if (ctx == NULL) {
    ctx = (ctx_t*)(fuse_get_context()->private_data);
  }

  return ctx;
}

1 个答案:

答案 0 :(得分:0)

您应该在头文件中包含这一行:

ctx = (ctx_t*)(fuse_get_context()->private_data);

然后您只需要调用一次 fuse_get_context,即在您的 init 函数中以 ctx 作为您的返回值。 init 函数的返回值将在 fuse_context 的 private_data 字段中传递给所有文件操作,并作为 destroy() 方法的参数。然后,您可以在调用 fuse_main_function 时将 ctx 作为参数之一传递。