我想知道如何通过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
重定向到孩子,但我必须按照项目的说明将管道描述符实际传递给孩子。stdin
stdout
任何帮助表示赞赏。