私はsycallsで遊んでいて、次の行に沿ってコードを書いたところです。
/* 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);
}
クローンコマンドに関数ではなくバイナリを呼び出させるにはどうすればよいですか?(これも可能ですか)、またはファイル記述子を共有しながらシステムコールを使用しますか?
ありがとう