看板 C_and_CPP 關於我們 聯絡資訊
版友好 我是在安卓上開發,寫原生程式,也就是以C來編寫 我寫了一個小程式,再一個回圈內做一個一秒後會執行 handlerFunc 的 function 後此function 每一秒後就會進來。 handlerFunc { ALOGD(變數 A) //印出 變數A = 0; //操作變數A alarm(1); } while { if(isHidOpen == false) { fd = open(/dev/hidraw0, O_RDWR); if(fd) { isHidOpen = true; signal(SIGALARM, handlerFunc); } else close(fd); } else { bytes_read = read(fd,buf,sizeof(buf)) 變數A++; if(bytes_read > 0) { ... } else { alarm(0); close(fd); } } } 運行時,總會隨機當掉,然後就系統重開,網路上查詢,看起來是 signal 會搶資源 造成死鎖產生,但還是不確定,沒有統一說法,有沒有達人,為在下指點一下呢? 感謝回復,我寫完整點補上我缺的 close 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.115.110.197 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1489206628.A.11C.html
petercoin: 對底層不熟,但是open之後不用close嗎? 03/12 00:36
※ 編輯: gn00618777 (61.220.69.181), 03/14/2017 13:36:01
petercoin: if(fd)那邊用完還是沒有關閉? 03/14 13:38
※ 編輯: gn00618777 (61.220.69.181), 03/14/2017 17:11:56
gn00618777: 我再修改了,只有在讀取失敗時,我才會關閉 03/14 17:13
※ 編輯: gn00618777 (61.220.69.181), 03/14/2017 19:50:21
gn00618777: https://goo.gl/SlRHGj 這篇網誌提供了解答 03/15 10:09