[英]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.