IPC (inter process communication)
シグナルキャッチとシグナルレイズを使って行うことは可能ですか?
プログラムを2つ作りました。最初のプログラムではシグナルの処理を行い、別のプログラムでは別のプログラムで処理したいシグナルを発生させました。私はうまくいきませんが、信号を使用してこれら2つのプログラム間で通信を行い、このraise信号でいくつかのバイトのデータを送信したいと考えています。これどうやってするの?
このシグナルでもメッセージを渡したいです。私はそれを行うことができますか?可能です?
また、シグナルを使用した IPC メカニズムの短所と利点は何ですか?
以下は、私の2つのプログラムの作業コードです。これで、シグナルを発生させてシグナルをキャッチすることはできますが、あるプログラムから別のプログラムにデータを渡したいです。
2 番目のプログラムでは、最初のプログラムのプロセス ID を使用しました。どうすれば動的にできますか。
最初のプログラム:
/* Example of using sigaction() to setup a signal handler with 3 arguments
* including siginfo_t.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
static void hdl (int sig, siginfo_t *siginfo, void *context)
{
printf("sig no = %d \n", sig);
if(sig == SIGINT)
exit(0);
printf ("Sending PID: %ld, UID: %ld\n",
(long)siginfo->si_pid, (long)siginfo->si_uid);
}
int main (int argc, char *argv[])
{
struct sigaction act;
sigemptyset(&act.sa_mask);
act.sa_sigaction = &hdl;
act.sa_flags = SA_SIGINFO;
if (sigaction(SIGUSR1, &act, NULL) < 0) {
perror ("sigaction SIGUSR1");
return 1;
}
if (sigaction(SIGINT, &act, NULL) < 0) {
perror ("sigaction SIGINT");
return 1;
}
while (1)
{
sleep(1);
}
return 0;
}
第二番組
#include <stdio.h>
#include <signal.h>
void main(void)
{
while (1)
{
sleep(1);
kill(11558, SIGUSR1);
}
}