0

我必须用 C 编写一个使用进程而不是线程的程序(我在 UNIX 中编写):

父亲生了7个孩子。每个孩子生成一个随机整数并开始一个从 0 到该随机整数的空 for 语句。最后,父亲调用 wait 并打印最后一个但已终止的进程的 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;
}

编辑:我的代码有什么问题:最后,它不打印任何内容而不是 pids,它打印

“数组,figlio 1,pid”

例如,而不是“数组,figlio 1,pid 3898”

4

0 回答 0