私はLinuxでコーディングしており、別のプログラムを実行していくつかのタスクを実行しようとしています。mmapをCのexecve関数に渡すには?
マスターは、いくつかの入力ファイル(スレーブごとに1ファイル)で何らかの単語検索を行うためにスレーブを実行する必要があります。 すべての検索が完了した後、マスターはスレーブプロセスで見つかったマッチメント行を出力ファイルに書き込みます。私は名前付き共有メモリを使ってマスターとスレーブ間の通信をしようとしています。
私のmmap
コールのポインタをマスタのメインに渡して他のプログラムに渡す必要がありますが、その型が一致しないためにできません。
シンクロナイズにセマフォを使用する場合は、共有セマフォのmmapも渡す必要があります。スレーブを実行するには、発信者のmain
のコードスニペットがあります。私は奴隷メインでARGVを使ってnewArgvに到達することができます:あなたはexecve
-ed実行可能にmmap
を渡すことはできません
int f = open(argv[1], O_RDWR);
unsigned int *addr = mmap(0, 10000, PROT_READ | PROT_WRITE, MAP_SHARED, f, 0);
char * newArgv[10];
for (int a = 0; a < numberOfFiles; a++) {
newArgv[0] = wordToSearch;
newArgv[1] = argv[3 + a];
char * path = "./psearch2aslave";
execve(path, newArgv, NULL);
}
ポインタを渡さないでください。同じポインタではありません。あなたが適切なOSの本を手に入れ、そのIPCの章を読んだら、匿名のmmapはどのプロセス間でもIPCをサポートしないと言います。実際のファイルにmmapし、ファイル名を渡したいと思うかもしれません。 – HuStmpHrrr
名前を渡すと、mmapを使用する必要はありません。これは匿名のmmapではなく、**共有メモリ**と呼ばれています。 –
私はあなたが名前を渡しているのを見ません。 nullを渡すので、匿名です。 – HuStmpHrrr