我正在使用開源的映射工具,它有能力使用g_io_add_watch來觀察文件描述符。我正在嘗試觀察stdin文件描述符,並且當stdin接收數據時,我可以成功地調用回調函數。但我無法讀取這些數據。我正在嘗試修改回調函數,以接收開源api的處理程序中描述的信息。void **回調函數的混淆
編輯**我的問題首先是什麼是無效**,在這種情況下它將如何使用。我希望我的回調函數提供參數,這些參數是爲您在下面看到的readUserInput_two函數描述的,我需要將它傳遞到下面描述的回調系統。我很困惑,爲了讓當前的實現能夠通過這些參數,我需要通過我的void **。
它看起來像這樣
readUserInput_two(GIOChannel *ioch, GIOCondition cond, gpointer data)
我想這個指針存儲到其定義爲
struct callback {
void (*func)();
int pcount;
enum attr_type type;
void *p[0];
};
在這種用於實例您提供以下參數的回調函數回調
callback_new(void (*func)(void), int pcount, void **p)
在此調用中,pcount是您參數的數量r函數指針應該有,並且我認爲void ** p或者是那些參數的類型或者類似的東西,但是我似乎無法弄清楚。
當回調被觸發時,它調用一個定義在定義語句中的函數。
#define callback_call_3(cb,p1,p2,p3) callback_call_args(cb, 3, p1, p2, p3)
該函數被定義爲各種數量的p的ex。 callback_call_1(cb,p1)也存在。任何人都可以解釋如何讓我的回調函數接收這些數據字段。調用callback_call_3的中間回調fire函數看起來像這樣。
static gboolean
navfocus_call_watch(GIOChannel * iochan, GIOCondition condition, gpointer t)
{
struct callback *cb=t;
if(cb->pcount == 1)//I added this if before it only had callback_call_0
{
callback_call_0(cb);
}
else if(cb->pcount == 4)
{
callback_call_3(cb,iochan,condition,t);
}
return TRUE;
}
我不明白你的問題是什麼,你有什麼嘗試,什麼不行? –
編輯說明更多 –