我正在用Linux编写一个系统调用,为此,我想使用kthread_run
创建几个线程。然而,当我传递函数指针时,我得到:
error: passing argument 1 of ‘kthread_create_on_node’ from incompatible pointer type
相关代码如下:
//method to do nothing for 100 milliseconds
int exist()
{
mdelay(100);
return 0;
}
//function pointer to exist
int (*exist_ptr)(void) = ∃
//create processes and delta queues
for (i = PROC_NUM - 1; i >= 0; i--)
{
char name[6] = {'d', 'e', 'l', 't', 'a', i2};
delta_entry de = {
.task = kthread_run(exist_ptr, NULL, name);
.list = linked_list;
.delta_time = PROC_NUM * MILSEC_GAP;
.position = i2;
}
enqueue(&linked_list, &de, i2 - 1);
i2++;
}
这显然不是所有的代码,因为我不想让这篇文章太长。谢谢!
发布于 2019-06-26 23:45:48
从linux源代码看,kthread_run
是一个名为kthread_create_on_node
的宏,它需要int (*threadfn)(void *data)
。
int exist()
接受未指定数量的参数,因此与该函数签名兼容,但int (*exists_ptr)(void)
不接受任何参数。(仅在C++中,int exist()
和int exist(void)
是同义词。在C中,()
表示未指定的提升参数,而(void)
表示没有参数。)
在现代C中,通常不鼓励非原型化函数定义。您应该从一开始就让exist
函数的签名int exists(void *unused)
。
https://stackoverflow.com/questions/56776473
复制相似问题