簡體   English   中英

是否可以通過實時信號發送浮點值?

[英]Is it possible to send out float value with realtime signal?

所以我在 c 中有兩個應用程序。 第一個必須使用實時信號向另一個發送數據。 我要發送的數據是浮點值。 據我所知,使用 rt 信號發送數據的唯一方法是使用與它一起使用的union sigval 但是,它的sival_int字段是 int 類型的,而另一個字段是一個指針,我認為它在其他獲取信號的進程中意義不大。 我從老師那里知道以某種方式這是可能的,但不知道如何解決這個問題。 有任何想法嗎?

編輯:澄清一下,我的老師說可以使用實時信號和union sigval信號來實現這一點,我很好奇如何。

在所有當前的 Linux 硬件架構中, sizeof (int) == sizeof (float)並且都沒有任何填充位; 它們的存儲表示是相同的,並且將 float 類型轉換為 int 然后返回到 float 始終會產生原始 float(和存儲表示)。

這意味着您需要通過memcpy(&value.sival_int, &float, sizeof (int))將浮點數的存儲表示復制到 int,或者使用聯合來鍵入浮點數和 int(這是一個擴展受 GCC、clang、icc 和其他可用於 Linux 的 C 編譯器支持); 然后通過sigqueue()將信號和值發送到目標進程。

要接收信號和值,您可以使用sigaction()安裝信號處理程序(將.sa_sigaction用於 function 指針,並在.sa_flags SA_SIGINFO 或阻塞信號(通過sigprocmask() )並使用sigwaitinfo()sigtimedwait()顯式捕獲它。

暫無
暫無

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

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