親プロセスが各子と個別に通信するための何らかの方法が必要です。
私には、他の子供たちとは別に親とコミュニケーションをとる必要のある子供たちがいます。
親が各子供とプライベートなコミュニケーションチャネルを持つ方法はありますか?
また、たとえば子は親に構造体変数を送信できますか?
私はこの種のことに慣れていないので、どんな助けでもありがたいです。ありがとうございました
(ここではLinuxについて話していると仮定します)
ご存知かもしれませんが、fork()
自体は呼び出しプロセスを複製するだけで、 [〜#〜] ipc [〜#〜] を処理しません。
フォークマニュアルから:
fork()は、呼び出しプロセスを複製することにより、新しいプロセスを作成します。子と呼ばれる新しいプロセスは、親と呼ばれる呼び出しプロセスの正確な複製です。
IPC forked()を処理する最も一般的な方法は、特に「各子とのプライベート通信シャネル」が必要な場合にパイプを使用することです。 pipe
マニュアルに記載されているものに(戻り値はチェックされていません):
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char * argv[])
{
int pipefd[2];
pid_t cpid;
char buf;
pipe(pipefd); // create the pipe
cpid = fork(); // duplicate the current process
if (cpid == 0) // if I am the child then
{
close(pipefd[1]); // close the write-end of the pipe, I'm not going to use it
while (read(pipefd[0], &buf, 1) > 0) // read while EOF
write(1, &buf, 1);
write(1, "\n", 1);
close(pipefd[0]); // close the read-end of the pipe
exit(EXIT_SUCCESS);
}
else // if I am the parent then
{
close(pipefd[0]); // close the read-end of the pipe, I'm not going to use it
write(pipefd[1], argv[1], strlen(argv[1])); // send the content of argv[1] to the reader
close(pipefd[1]); // close the write-end of the pipe, thus sending EOF to the reader
wait(NULL); // wait for the child process to exit before I do the same
exit(EXIT_SUCCESS);
}
return 0;
}
コードはかなり自明です:
そこから、やりたいことが何でもできます。戻り値を確認し、dup
、pipe
、fork
、wait
...のマニュアルを読むことを忘れないでください。これらは便利です。
プロセス間でデータを共有する方法は他にもたくさんあります。これらは「プライベート」要件を満たしていませんが、興味を引く可能性があります。
または単純なファイルでも...(SIGUSR1/2 signals を使用してプロセス間でバイナリデータを一度送信したことがあります...しかし、そのことはお勧めしません。)そしておそらくそれ以上今は考えていません。
幸運を。