我正在用串口實現一個linux應用程序。我使用信號機制使其異步。在linux下異步串口編程如何區分讀寫
saio.sa_handler = signal_handler_IO;
我正在讀取信號處理程序本身及其工作中接收到的數據。由於我需要非常快速地響應,因此我在信號處理程序中實現了更多邏輯。所以信號處理程序不是很小。
問題是,當我試圖寫入串行端口時,信號處理程序再次被調用。我不想要這個。是否可以僅將信號處理程序用於接收的數據。
還是有可能區分信號處理程序中的接收和傳輸?
基蘭
我正在用串口實現一個linux應用程序。我使用信號機制使其異步。在linux下異步串口編程如何區分讀寫
saio.sa_handler = signal_handler_IO;
我正在讀取信號處理程序本身及其工作中接收到的數據。由於我需要非常快速地響應,因此我在信號處理程序中實現了更多邏輯。所以信號處理程序不是很小。
問題是,當我試圖寫入串行端口時,信號處理程序再次被調用。我不想要這個。是否可以僅將信號處理程序用於接收的數據。
還是有可能區分信號處理程序中的接收和傳輸?
基蘭
是否有可能使用信號處理程序只對接收的數據。
如果你堅持使用信號來完成任務,當然可以通過讓生成信號的軟件的一部分不發送或發送另一個信號來發送數據。
當你配置信號處理程序,您可以添加以下標誌的其中sa_flags在賽歐的sigaction結構:
saio.sa_flags |= SA_SIGINFO;
在配置這個標誌,你的函數signal_handler_IO將需要3個參數:
void signal_handler_IO (int signo, siginfo_t *info, void *context)
那麼結構siginfo_t將包含理解導致中斷的信號所需的信息。
如何創建一個結構,如果您編寫或讀取數據,您將修改該結構。這種方式在你的處理程序中可以使用if()函數,你只能在你想要的條件下執行它。 – Dimitri 2015-02-06 07:43:02
你爲什麼使用信號?使用'select()'等通常的方法工作正常。 – Armali 2015-08-11 06:39:24