尝试将数据从 execve 子进程传递到 C 中的父进程

问题描述

我一直在尝试使用管道来传递在子进程中计算的值(由父进程中的 execve 创建),但一直无法弄清楚为什么数据没有被传输。我的理解是,除非在管道上设置了 close on exec 标志,否则即使子进程是使用带有新堆栈、堆等的数据副本创建的,管道仍将在进程间共享?

父进程的工作原理是允许用户输入一个值来更改字符串,而字符串的重新分配在子进程中完成以发送回父进程。

这是我的父进程代码:

if((pid = fork())) {
    if(pid < 0) {
        printf("Fork error: %s\n",strerror(errno));
    }
    wait(&status);
} else {
    int fd[2];
    pipe(fd);
    char* argv[] =  {"new string",variableToChange,NULL};

    ret = execve("newstringchildprocess",argv,environ);
    close(fd[1]);
    int nbytes = read(fd[0],readbuffer,sizeof(readbuffer));
    printf("Received string: %s",readbuffer);
    close(fd[0]);
}

和子进程(单独的C文件):

int fd[2];
pipe(fd);
char readbuffer[100];

close(fd[0]);
printf("Enter new string: ");
write(fd[1],(strlen(variableToChange) + 1));
int charCount = sizeof argv[0];
variableToChange = (char*) malloc(charCount);
close(fd[1]);
wait(NULL);
exit(EXIT_SUCCESS);
       

目前,如果我从两个文件中删除管道代码,我只会从子进程获得输出。任何帮助都会很棒

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)