English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

請問大大...在windows中的signal寫法拿到Linux下編譯是會有錯的...
必須造它設定的格式寫....
用man signal查詢的結果如下:
SYNOPSIS
#include
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
可是我還是不懂他的意思耶...有哪位大大可以幫我說明一下嗎!!!
例如下面一個寫SIGINT的程式在windows中是可以跑的,那在Linux下要改成怎樣呢...感謝答覆!!!!急!!!
#include
main()
{
void signal_handler(void);
for(;;)
{
printf("loop\n");
signal(SIGINT, signal_handler);
}
}

void signal_handler(void)
{
int i;
for(i=0;i<10000;i++)
{
printf("ctrl+c\n");
signal(SIGINT, signal_handler);
}
return;
}

2005-05-02 14:03:11 · 1 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

1 個解答

你按ctrl+c的時候, 電腦會傳一個中斷(Interrupt)的訊息給你的程式. 一般來說, 如果程式自己沒有設定中斷訊息程序的話, 程式就會結束. 但是如果程式自己設定中斷訊息程序的話. 你可以在中斷訊息程序裡決定要做什麼. 比如你可以顯示給使用者說程式已被中斷請做好準備... :)
要怎樣寫中斷訊息程序呢.很簡單. 你只要寫一個函式
void signal_handler(int signal)
{
...
}
signal_handler只是函式的名字,可以改.
signal只是變數的名字,可以改.
其它的不能改.

函式寫完之後再到main裡加

signal(SIGINT, signal_handler);

到main裡就好了. 這指令告訴電腦如果在執行這程式時收到SIGINT(cntl+c)的話請執行signal_handle. 所以在執行你的程式時如果被ctrl+c的話. 你的程式會暫停執行它現在的指令而跳到signal_handler去執行signal_handler裡的指令而不會結束.(除非在signal_handler裡你自己叫exit去結束程式). signal_handler執行完之後會跳回原來的指令而繼續執行下去

一般來說在signal_handler裡都有exit因如果電腦傳一個中斷訊息給你的話, 通常是要你結束運行.

P.S. 在電腦裡有好多種中斷訊息, 像SIGINT和SIGKILL.
P.P.S. 要記的#include

例:
#include
#include
void signal_handler(int);
int main()
{
signal(SIGINT, signal_handler);
while (1);
return(0);
}
void signal_handler(int signal)
{
printf("收到\n");
}

在執行這程式時, 如果你按CTRL+C的話. 螢幕會顯示"收到".

懂不懂? 不懂請再問

2005-05-03 01:41:40 · answer #1 · answered by 7 · 0 0

fedest.com, questions and answers