//code for foo (run executable as ./a.out)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/wait.h>
int main (int argc, char **argv) {
pid_t pid;
pid = fork();
int i = 1;
char *parms[] = {"test2", "5", NULL}; //test executable named test2
if(pid < 0) {
fprintf(stderr, "Fork failed");
return 1;
}
else if(pid == 0) {
printf("Child pid is %d\n", pid);
i = execv("test2", parms); //exec call to test with a param of 5
}
else {
wait(NULL);
}
printf("I is now %d\n", i); //i is still 1 here, why?
return 0;
}
Привет всем, Я пытаюсь узнать немного о вызовах fork и execv(). Я делаю свою программу foo.c выше, чтобы позвонить в файл, который я назвал test.c. Я развил дочерний элемент и попросил ребенка вызвать execv, который просто добавит 10 к считываемому параметру. Я не уверен, почему переменная не изменяется в нижней части моей функции foo.c. Должен ли вызов быть указателем или возвращать адрес? Любая помощь будет принята с благодарностью. БлагодаряЗахват возвращаемого значения от execv()
Код для test.c (исполняемый названный test2)
#include <stdio.h>
int main(int argc, char ** argv[]) {
int i = atoi(argv[1]);
i = i +10;
printf("I in test is %d\n", i);
return i;
}
Если вы хотите, чтобы захватить возвращаемое значение из дочернего процесса, можно использовать метод IPC (трубная розетка и т. д.) или даже пытаться обмениваться данными, записывая и просматривая файлы. – YaleCheung
У меня была такая же идея с файлом, что и хахаха, это мой ответ, чтобы обменять данные :) – wheatfairies