Re: [問題] ctrl + c

看板Linux作者 (呆呆小狼￾ ￾ N￾ ￾ )時間15年前 (2008/12/10 23:35), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #19F-730y (Linux)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
問題
2
14
文章代碼(AID): #19F-730y (Linux)