Я пытаюсь продемонстрировать, что программы, использующие exec
, не могут разыменовать унаследованные указатели, но мой указатель выглядит иначе. Это предназначено?
p1. c:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void main()
{
int *pint = malloc(sizeof(int));
*pint = 25;
printf("[main] pint: @%p = %d\n", pint, *pint);
int h = fork();
if(h == 0) {
(*pint)++;
printf("[fork] pint: @%p = %d\n", pint, *pint);
char *fname="./p2";
char *arg[3];
arg[0] = "./p2";
arg[1] = (char*)pint;
arg[2] = NULL;
printf("[fork] arg1: @%p = %d\n", arg[1], *arg[1]);
execvp(fname, arg);
} else {
sleep(1);
printf("[main] pint: @%p = %d\n", pint, *pint);
}
}
p2. c:
#include <stdio.h>
int main(int argc,void *argv[])
{
printf("[ p2 ] arg1: @%p\n", argv[1]);
}
Вот пример вывода, который я получаю:
$ ./p1
[main] pint: @0x55de8f6db260 = 25
[fork] pint: @0x55de8f6db260 = 26
[fork] arg1: @0x55de8f6db260 = 26
[ p2 ] arg1: @0x7ffe13b9fc65 // <--- mismatch
[main] pint: @0x55de8f6db260 = 25