クライアントがTCPソケットを使用してサーバーに接続できるようにし、ユーザーがクライアント側からサーバー側にシステムコールを発行して応答を返すことができるようにする単純なクライアント/サーバープログラムを作成しようとしています。例えば:
クライアントの問題: ls
サーバーは /usr/bin または w/e で ls を見つけ、execve() を使用して実行します。
また、クライアント側でシステム コールを発行する lls や lmkdir などのようなものも用意します。
問題は、「ls」またはその他のコマンドが実際に呼び出されていないため、私の execve() が正しく実行されていないように見えることです。私はこれと同じ種類のプログラムを以前にローカル側のみ(サーバーなどなし)で実行したことがあり、execve()は正常に機能しました。ここにいくつかのコードがあります:
pid = fork();
if(pid){ // Child
printf("child wait");
pid = wait(&status);
printf("Child dead\n");
}else{ // Parent
if(execPath){
execve(execPath, arglist, env);
printf("Command Complete\n");
}
}
何らかの理由で、PID ステートメントの子セクションの printfs がまったく実行されていません。システムが実際にプロセスをフォークしているとは思いません。クライアント/サーバータイプのプログラムであるため、これを機能させるために何か特別なことをしなければなりませんか、それともまったく同じように機能する必要がありますか?
ありがとう