簡體   English   中英

Linux套接字編程:通過SIGIO讀取數據

[英]Linux socket programming: read data by SIGIO

我編寫了一個程序,該程序可以讀寫一些gpio引腳,並使用數據報連接通過套接字接收一些數據。 我想嘗試在收到SIGIO信號時從套接字讀取數據。 但是,當我嘗試這樣做時,對gpio引腳的讀/寫操作開始失敗。 為什么會這樣呢?

如果我不激活gpio讀/寫操作以拋出SIGIO信號,則由於gpio引腳上的讀/寫操作,我不應該接收SIGIO信號。 我錯了嗎? 還是所有IO操作都開始定向到我的信號處理程序?

這是我的一部分代碼,其中我為套接字激活了SIGIO信號。

int fd = socket( AF_INET, SOCK_DGRAM, 0 );
...
struct sigaction sa;
memset( &sa, 0, sizeof(struct sigaction) );
sigemptyset( &sa.sa_mask );
sa.sa_sigaction = SignalHandler;
sa.sa_flags = SA_RESTART | SA_SIGINFO;
sigaction( SIGIO, &sa, NULL );
fcntl( fd, F_SETOWN, getpid() );
fcntl( fd, F_SETSIG, SIGIO );
fcntl( fd, F_SETFL, O_NONBLOCK | O_ASYNC );

謝謝。

注意:代碼非常龐大,並且是以OOP概念編寫的。 似乎不可能將所有代碼都復制到此處。 我只是在這里復制了與我的問題有關的代碼。 但是,我將創建一個MCVE並稍后在此處復制。 另外,我試圖理解linux的信號概念。 因為這意味着我對信號概念或SIGIO行為缺乏了解。

SIGIO是一個大桶,可以同時從多個不同來源引起。

在主循環中使用select()/ poll()是比依賴SIGIO更好的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM