Re: [問題] ctrl + c
※ 引述《godman362 (Shizuru)》之銘言:
: 問題解決了,我後來的方法一樣是使用signal的方式處理
: 只是在signal內部我又加了kill,大概是這樣寫的:
因為你並沒有處理程式的結束,BRK跟ABORT會不斷的產生的
: void sigfun (int sig)
: {
: //Close ttyS0
: close(ttyfd);
: //Kill
: kill(getpid(), SIGQUIT);
這個方法有點粗魯,而且容易再記憶體裡面留下碎塊。要等OS發現才會清理掉。
: 不過我還是不瞭解何謂ISR是什麼東西
所謂的ISR就是中斷服務常式
下面這個信號處理範例給你參考
Example:
// Written by Wolflord Asenli Wang for demo how to handle signal
void sigprc(int sig){
switch(sig){
case SIGBREAK :
case SIGABRT :
if(ttyfd!=0){ //if fd != null close it and reset fd
close(ttyfd);
ttyfd=0;
}
exit(3); //break and abort using exit(3) to exit;
break;
case SIGTERM :
if(ttyfd!=0){ //if fd != null close it and reset fd
close(ttyfd);
ttyfd=0;
}
exit(1); //term program using exit(1) to exit;
break;
default: break;
}
signal(sig,(void(*fptr)(int))&sigprc); // reset signal proc
}
//-----------------------------------------------------
int main(int argc,char *argv[]){
...
...
signal(SIGBREAK,(void(*fptr)(int))&sigprc); //set event handle
signal(SIGABRT,(void(*fptr)(int))&sigprc); //set event handle
signal(SIGTERM,(void(*fptr)(int))&sigprc); //set event handle
...
...
}
//-----------------------------------------------------
main有這種寫法,不過有些C不會接受就是了(C++大多會接受)
int main(int argc,char *argv[]){
...
...
signal(...,(void(*fptr)(int))&sigprc); //set event handle
...
...
}
--
~~於是,銀河的歷史又被海賊抹黑了好幾百頁。
- A23203 -
BM4GRM Harlock WolfLord
★ <<上站通知>> -- 我來啦!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.59.234
※ 編輯: WolfLord 來自: 220.130.59.234 (12/10 23:37)
推
12/11 06:23, , 1F
12/11 06:23, 1F
討論串 (同標題文章)