그래서 c에 두 개의 앱이 있습니다. 첫 번째는 실시간 신호를 사용하여 다른 사람에게 데이터를 전송해야합니다. 내가 보내고 싶은 데이터는 float 값입니다. 내가 아는 한 rt 신호로 데이터를 보내는 유일한 방법은 그것을 사용 union sigval
하는 것입니다. 그러나 그 sival_int
필드는 int 유형이고 다른 필드는 신호를 얻는 다른 프로세스에서 많은 것을 의미하지 않을 것이라고 생각하는 포인터입니다. 선생님으로부터 어떻게 든 가능하다는 것을 알고 있지만이 문제에 접근하는 방법에 대한 단서가 없습니다. 어떤 아이디어?
편집 : 명확히하기 위해 선생님은 실시간 신호를 사용하여 이것을 달성 할 수 있다고 말했고 union sigval
어떻게하는지 궁금합니다.
현재의 모든 Linux 하드웨어 아키텍처에서는 sizeof (int) == sizeof (float)
패딩 비트가 없습니다. 그들의 저장 표현은 동일하며, float를 int에 타입 -punning 한 다음 다시 float로 돌아 가면 항상 원래의 float (및 저장 표현)이 생성됩니다.
즉, float의 저장소 표현을를 통해 int에 복사 memcpy(&value.sival_int, &float, sizeof (int))
하거나 공용체를 사용하여 float 및 int를 형식화해야합니다 (이것은 GCC, clang, icc 및 사용 가능한 다른 C 컴파일러에서 지원하는 확장입니다. Linux에서); 그런 다음를 통해 신호와 값을 대상 프로세스로 보냅니다 sigqueue()
.
신호와 값을 받으려면 sigaction()
( .sa_sigaction
함수 포인터에 사용하고 SA_SIGINFO
in 포함 .sa_flags
)을 사용하여 신호 처리기를 설치할 수 있습니다 . 또는 (통해 신호를 차단 sigprocmask()
) 및 명시 적으로 사용하여 잡을 sigwaitinfo()
나 sigtimedwait()
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다