0

我有这段代码:

using Posix;

int fuseguifs_getattr(string path, Posix.Stat *stbuf)
{
    int res;
    res = Posix.lstat(path, stbuf);
    if (res == -1)
        return -Posix.errno;

    return 0;
}

static int main(string [] args)
{
    Posix.Stat *a;
    fuseguifs_getattr("/home/leon", a);
    return 0;
}

当我试图编译它时,我得到了这个错误:

test.vala:6.26-6.30: error: Argument 2: Cannot convert from
`Posix.Stat' to `Posix.Stat*'
    res = Posix.lstat(path, stbuf);
                            ^^^^^
Compilation failed: 1 error(s), 0 warning(s)

我试过改变这个: fuseguifs_getattr("/home/leon", a); 到 fuseguifs_getattr("/home/leon", *a);

但后来我收到一个错误:“无法将值传递给引用或输出参数”

我试过添加“out”: res = Posix.lstat(path, out *stbuf);

这给出了这个错误:错误:ref 和 out 方法参数只能与字段、参数、局部变量和数组元素访问一起使用

我无法更改 fuseguifs_getattr 方法参数,因为这是熔断器绑定所期望的一部分。

我真的被困住了。有谁可以解决这个问题?

4

2 回答 2

3

我想你想做这样的事情:

int fuseguifs_getattr(string path, out Posix.Stat stbuf) {
   int res;
   res = Posix.lstat(path, out stbuf);
   if (res == -1)
      return -Posix.errno;
   return 0;
 }

static int main(string [] args)
{
    Posix.Stat a;
    fuseguifs_getattr("/home/leon", out a);
    return 0;
}

Posix.Stat是 lstat 将要填充的结构。lstatVala 不希望传递指向该结构的指针,而是希望您通过使用out关键字来指示它将用作输出,该关键字与ref关键字一样,必须在声明和使用中指定。因此,任何函数定义都是out,您必须out在调用函数时再次指定。

于 2011-11-08T21:33:22.983 回答
0

这似乎解决了它:

int fuseguifs_getattr(string path, Posix.Stat *stbuf)
{
    int res;
    Posix.Stat a;
    res = Posix.lstat(path, stbuf);

    if (res == -1) {
        return -Posix.errno;
    }
    *stbuf = a;

    return 0;
}

那是正确的方法吗?

于 2011-11-09T07:44:54.803 回答