我需要一些帮助。我已经做了好几个小时而且无法让它工作。通常,我有一个访问内核驱动程序的函数,我想将该函数作为参数传递给另一个包含一些pthread代码的函数。我研究并发现我可能需要一个函数指针。
这是我想要作为参数传递的函数。
static void kernelTest(char Send[BUFFER_LENGTH])
{
int fd = open("/dev/kernelTest", O_RDWR);
}
这是我要传递的功能:
static void createKThread(void (*f)(char *))
{
pthread_t t1;
int ret;
ret = pthread_create(&t1, NULL, (*f)(char), NULL);
pthread_join(t1, NULL);
}
我尝试了函数指针,但它给了我错误。
error: expected expression before ‘char’
我非常感谢所提供的任何帮助。谢谢!
答案 0 :(得分:3)
(*f)(char)
语法无效。您似乎正在尝试调用函数f
并将char
作为参数传递,而您无法做到这一点。
由于您实际上并未真正致电f
,因此请直接将其传递给pthread_create
:
ret = pthread_create(&t1, NULL, f, NULL);
然而,这仍然存在问题。 pthread_create
的第三个参数应为void *(*)(void *)
类型,即指向具有void *
参数且返回void *
的函数的指针。您的函数的类型为void (*)(char *)
,因此参数不兼容。
您需要更改kernelTest
的签名以匹配pthread_create
期望的内容:
static void *kernelTest(void *param)
{
char *send = param;
int fd = open("/dev/kernelTest", O_RDWR);
return NULL;
}
或者你需要创建一个匹配pthread_create
的包装函数:
static void *kernelTest_wrapper(void *param)
{
char *send = param;
kernelTest(send);
return NULL;
}