Я бы хотел показать домашнее задание по операционной системе, что обмен данными между двумя процессами невозможен.Вопрос был задан в разделе 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%