【发布时间】:2011-09-12 03:52:05
【问题描述】:
我想知道如何通过execve() 命令传递文件描述符,然后在另一端访问它。我知道我可以使用dup2 来重定向文件描述符,但我不能这样做。我需要将文件描述符实际传递给孩子并在孩子中使用它。
到目前为止我做了什么:
父母使pipe + args 如下:
int pfd[2];
if(pipe(pfd) == -1)
exitWithError("PIPE FAILED", 1);
char *args_1[] = {"reader", argv[1], (char*) pfd, (char *) 0};
然后孩子在fork() 之后调用execve,如下所示:
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 的程序的工作版本,但我实际上必须将管道描述符传递给孩子按照项目的说明。
感谢任何帮助。
【问题讨论】:
标签: c casting file-descriptor execve