gpt4 book ai didi

c - 如何将参数传递给clone()调用的函数?

转载 作者:太空狗 更新时间:2023-10-29 15:33:32 27 4
gpt4 key购买 nike

我必须在主函数中使用 clone() 系统调用来获得 2 个线程。 (我知道,还有其他选择,但在这种情况下,它必须是 clone())。

系统调用有效,两个线程都到达指定函数 (foo)。但是在这个函数中,我需要他们用这个签名调用另一个函数:

void increment(int* a, int b)

(旁注:它将 b * 1 添加到 a。(= a+b))

重要的是,a 和 b 都在主函数中声明,我不知道如何将它们传递给 foo。

我已经尝试过不同的东西,但没有成功。我得到一个提示:使用适配器。但我不知道该怎么做。 (我也不知道如何在带有 int 的克隆中使用 args。)

有什么建议吗?

最佳答案

clone() 的参数之一是 void* arg。这使您可以将 void 指针传递给您的函数。为了传递一个 int 指针和一个 int,您必须创建一个结构,其中有一个 int 指针和分别分配给 ab 的 int,然后将指针转换为该结构变成一个空指针。然后在函数中反转该过程。

我的 C 有点生疏,我还没有编译这个,所以不要引用我的话,但它应该大致如下所示:

struct clone_args {
int* a;
int b
};

int main(int argc, char* argv[])
{
struct clone_args args;
args.a = a;
args.b = b;
void* arg = (void*)&args;
clone(fn, ..., arg, ...);
}

int fn(void* arg)
{
struct clone_args *args = (struct clone_args*)arg;
int* a = args->a;
int b = args->b;
}

注意:当 fn 被调用时,请注意您创建的结构仍在范围内,因为它不会被复制。您可能必须 malloc 它。

关于c - 如何将参数传递给clone()调用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com