函式指標、回撥函式與 GObject 閉包 GObject 子類物件的析構過程 GObject 的訊號機制——概覽
手冊所述,GObject 訊號(Gignal)主要用於特定事件與響應者之間的連線,它與作業系統級中的訊號沒有什麼關係。例如,當我向一個檔案中寫入資料的時候,我期望能夠有一個或多個函式響應這個“向檔案寫入資料”的事件,這一期望便可基於 GObject 訊號予以實現。
為了更好的理解 GObject 訊號機制的內幕,我們需要從回撥函式開始。
基於回撥函式與可變引數的事件響應
首先,寫出事件的製造者,它是一個向檔案寫入資料的函式 file_write:
?1 2 3 4 5 6 7 |
#include
<stdio.h> void
file_write
( FILE
*fp, const
char
*buffer)
{
fprintf
(fp, "%s\n" ,
buffer);
}
|
向檔案寫入資料完畢之後,我們希望有一個函式能夠將檔案全部的內容在終端打印出來,所以我們又增加了一個函式 file_print,並對 file_write 函式進行一點修改:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
void
file_print
( FILE
*fp)
{
char
*line = NULL;
size_t
len = 0;
ssize_t
read;
while
((read = getline(&line, &len, fp)) != -1){
printf ( "%s" ,
line);
}
free
(line);
}
void
file_write
( FILE
*fp, const
char
*buffer)
{ fprintf
(fp,
|