2012-01-21 47 views
5

目前,我讀了CTS和以下面的方式串行端口的DSR信號:如何在Linux中高效地等待RS232的CTS或DSR?

bool get_cts(int fd) { 
    int s; 
    ioctl(fd, TIOCMGET, &s); 
    return (s & TIOCM_CTS) != 0; 
} 

現在,我想等到get_cts()返回true。簡單的循環並不是我認爲的最佳解決方案(因爲它非常耗費資源)。

void wait_cts(int fd) { 
    while(1) { 
     if(get_cts(fd)) { 
      return; 
     } 
    } 
} 

在Linux上有沒有更好的解決方案使用C或C++? (因爲我根本不需要串行數據線,所以我不能使用任何硬件流量控制。)

+0

任何理由,你爲什麼不能睡在這個循環幾分? – Mat

+1

我可以這樣做,但沒有其他解決方案嗎? – SecStone

回答

1

select系統調用適用於類似的應用程序。你可以做其他的工作,或睡覺,然後定期檢查FD_SET的狀態。如果你的程序除了抓取數據,別的什麼都別做,否則它可能對你所做的事情有點矯枉過正。