Чтобы обновить среду var, называемую DOLP, в дочернем процессе, и это изменение должно быть видимым в родительском процессе. код выглядит следующим образом:Как передать среду var от дочернего к родительскому?
int main(void) {
int cid1 ,i;
char ear[20]="DOLP=7";
putenv(ear);
printf("parent(main) process %d, ppid is %d t %d \n",getpid(),
getppid(),atoi(getenv("DOLP")));
fflush(stdout);
cid1=fork();
if ((cid1 == 0)) {
//child process ...
int sd =atoi(getenv("DOLP")) -1;
char v[10];
sprintf(v,"%d",sd);
setenv("DOLP",v,1);
sleep(2);
printf("c process pid %d, ppid is %d sd value: %d\n", getpid(),
getppid(),atoi(getenv("DOLP")));
fflush(stdout);
sleep(1);
}
else{
sleep(2);
//parent process...
int sd =atoi(getenv("DOLP")) -1;
sprintf(ear,"DOLP=%d",sd);
putenv(ear);
sleep(1);
printf("parent(main) process %d, ppid is %d sd value %d\n",
getpid(),getppid(),atoi(getenv("DOLP")));
fflush(stdout);
}
return 0;
}
Выход я получаю следующим образом:
parent(main) process 25958, ppid is 25955 t 7
c process pid 25968, ppid is 25958 sd value: 6
parent(main) process 25958, ppid is 25955 sd value 6
на самом деле я хочу, чтобы родитель напечатать 5 для значения сд. Теперь, как сделать дочерние обновления в DOLP видимыми в родительском процессе.
По умолчанию среда ребенка является копией родительского элемента - если системный вызов 'execve()' не использовался для указания альтернативной среды. –
Вопрос был задан при создании основного (родительского) и дочернего. Родитель и ребенок должны по очереди отсчитывать среду var DOLP. Для достижения этого результата вы синхронизируете Parent, Child для повторного сна (sleep()), пробуждаете, печатаете и очищаете отпечатанную линию (вызов fflush()). И я сомневаюсь, что это возможно. – Uma