我想知道如何通过execve()命令传递文件描述符,然后在另一端访问它。我知道我可以dup2用来重定向文件描述符,但我不能这样做。我需要将文件描述符实际传递给孩子并在孩子中使用它。
到目前为止我做了什么:
Parent 使pipe+ args 如下所示:
int pfd[2];
if(pipe(pfd) == -1)
exitWithError("PIPE FAILED", 1);
char *args_1[] = {"reader", argv[1], (char*) pfd, (char *) 0};
execve然后孩子fork()像下面这样调用:
close(pfd[1]);
execve("./reader", args_1, NULL);
然后,在阅读器程序中,我尝试访问传递的管道描述符:
int main(int argc, char* argv[]){
...
write(argv[2][1], buf, read_test);
argv[2]应该引用管道描述符,然后argv[1]应该去管道的写端。我几乎肯定我需要在这里做一些不同的类型转换,但我尝试的一切都不太成功。
注意:我有这个程序的工作版本,用于dup2重定向到孩子,但我必须按照项目的说明将管道描述符实际传递给孩子。stdinstdout
任何帮助表示赞赏。