奇妙なビルドの問題があります。
別のプロセスに sigqueue を送信する簡単なテスト プログラムがあります。
この小さなコード例は、c++ プログラム (g++ でコンパイル) としてビルドして実行しますが、ac プログラム (gcc で) としてコンパイルすると、sigval 構造体が見つからないというエラーが発生します。
短い例:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
sigval value;
value.sival_int = 123;
sigqueue(0,SIGUSR1, value);
}
この質問を簡単にするために、pid を 0 に置き換えたことに注意してください。
そして、gcc でコンパイルすると、次のようになります。
$> gcc sigusr1_mini.c
sigusr1_mini.c: In function ‘main’:
sigusr1_mini.c:9: error: ‘sigval’ undeclared (first use in this function)
sigusr1_mini.c:9: error: (Each undeclared identifier is reported only once
sigusr1_mini.c:9: error: for each function it appears in.)
sigusr1_mini.c:9: error: expected ‘;’ before ‘value’
sigusr1_mini.c:10: error: ‘value’ undeclared (first use in this function)
ここで何が欠けているのですか、なぜ彼は sigval 構造体を見つけられないのですか? そして、なぜg ++はそれを見つけることができるのですか?
ありがとうヨハン