スレッドではなくプロセスを使用する C でプログラムを作成する必要があります (UNIX で作成しています)。
父親は7人の子供を産みます。すべての子はランダムな整数を生成し、0 からそのランダムな整数までの空の for ステートメントを開始します。最後に、父親は wait を呼び出し、終了した最後の 2 つ前のプロセスの pid を出力します。
これは私がしようとしているものです:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/shm.h>
#include <sys/ipc.h>
int main(){
int n = 7;
int i,r, random;
pid_t pid;
pid_t pid_padre;
int *shared_memory;
int segment_id;
int size = 1024;
int ciclo;
pid_padre = getpid();
printf("Inizio programma:\n");
printf("Processo Padre: [%d]\n", pid_padre);
segment_id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR);
shared_memory = shmat(segment_id, NULL, 0);
for(i=0;i<n;i++) {
shared_memory[i] = 0;
}
for(i=0;i<n;i++) {
pid =fork();
if (pid == 0) {
random = rand();
for(ciclo=0; ciclo<random; ciclo++);
for (r=0; r<n; r++) {
if (shared_memory[r] == 0) {
//printf("figlio %d\n",getpid() );
//shared_memory[r] = (int)getpid();
break;
}
}
break;
}
}
if (getpid() == pid_padre) {
wait(NULL);
//sleep(3);
for(i=0;i<n;i++) {
printf("array, figlio %d, pid \n",i , shared_memory[i]);
}
shmdt(shared_memory);
shmctl(segment_id, IPC_RMID, NULL);
}
return 0;
}
編集:私のコードの何が問題なのですか:最後に、pidの代わりに何も出力せず、出力します
"配列、フィリオ 1、pid"
たとえば、「配列、フィリオ 1、pid 3898」の代わりに