1
我玩弄sycalls,和刚才写的代码沿C中调用一个二进制文件(同时共享文件描述符)
/* Clone the process and launch Something */
child_stack = (void *) malloc(max_memory);
args = malloc(2 * sizeof (int **));
args[0] = in_socket_fds;
args[1] = out_socket_fds;
clone(foo, child_stack + max_memory ,CLONE_FILES|CLONE_VM|CLONE_IO|CLONE_FS, (void *) args);
wait();
线,其中foo的功能是:
int foo(int** args) {
fprintf(stderr, "Hello world %d %d", args[0][0], ags[1][0]);
_exit(0);
}
我真正想做的是从foo函数调用二进制文件。
int foo(int** args) {
system(start program foo)
_exit(0);
}
这个二进制应该共享相同的文件描述符表(因此以前使用克隆)。上面的代码是不正确的,因为我不认为系统允许共享文件描述符表。 (我不想要fds的副本,我真的希望能够读/写它们)这些fds是套接字。
int foo(int** args) {
system(start program foo)
_exit(0);
}
如何使克隆命令调用二进制而不是函数? (这甚至可能),或在共享文件描述符时使用系统调用?
感谢
我的印象是,叉继承了文件描述符的副本,而不是克隆谁积极共享表 – user1018513 2012-07-16 10:50:53
@ user1018513:fork()调用后,你的套接字文件描述符也可用在孩子。所以任何表共享都是不需要的。 – SKi 2012-07-16 10:59:43
@ user1018513:你可以使用'的clone()'创建执行功能的过程中,其中*又*调用'execlp()'(或其亲属之一)。但是,在这种情况下'fork()'是更简单的选择。克隆的'我的文档()'也让我抓我的头了不少关于它如何能/会用'EXEC *合作()'... – DevSolar 2012-07-16 12:15:02