Обмен данными между двумя процессами (используя exec) - PullRequest
0 голосов
/ 22 сентября 2019

Я бы хотел показать домашнее задание по операционной системе, что обмен данными между двумя процессами невозможен.Вопрос был задан в разделе exec моей домашней работы.Таким образом, я создал программу, которая получает указатель на целое число от другой программы и пытается прочитать его (эта операция должна завершиться сбоем, поскольку у программы нет прав на чтение данных).Однако полученный мной указатель не совпадает с указателем, который я посылаю через функцию exec.Это нормально?

Заранее спасибо за ваши замечания.

Программа отправки указателя

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int i = 5;
    char* iPointer = (void*) &i;

    //On affiche la valeur du pointeur de i
    printf("Valeur pointeur i: %p\n", iPointer);

    //on duplique le processus en cours
    if (fork() == 0)
    {
        // exécution du programme helloworld

        //on va ici envoyer la chaine de caractere, avec l'adresse memoire de i,  en paramètre de la fonction exec
        execl("./helloworld", iPointer, NULL);
    }
    else
    {
        sleep(3);
        //process parent
        printf("Le processus enfant s'est terminé\n");
        printf("PID of the current process (parent): %d", getpid());
    }
    exit(EXIT_SUCCESS);
}

Программа получения указателя

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    int* pointerReceived = (void*) argv[0];

    //On evalue la valeur du pointeur
    printf("Pointeur's value: %p\n", pointerReceived);

    // printf(" début de helloworld\n");

    return EXIT_SUCCESS;
}

Здесьэто вывод моей консоли

Hugo@Hugos-MacBook-Pro-2 Lab1 % ./dataShared
Pointer value of i: 0x7ffeec4449e8
Pointeur's value: 0x7ffeebc64b48
Le processus enfant s'est terminé
PID of the current process (parent): 3477%  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...