-1

Cで記述されたクライアント サーバー アプリケーションがあります。クライアントがサーバーに更新要求を行う基本的なアプリケーションです。利用可能なアップデートがある場合、アーカイブ ファイルがクライアントに送信されます。さらに、クライアントはそれを解凍し、その解凍されたアーカイブから特定のbashスクリプトを実行します。以上がまとめです。クライアント側で更新を行う C 関数を以下に示します。

void executeUpdates(char *path) {

    char    command[100];
    char    *tmp;

    strcpy(command, "tar xzf ");
    tmp = mystrcat(command, path);
    mystrcat(tmp, " -C /netnfork/updates/");
    system(command); //up to this point, I created the extract command and executed it.
    command[0] = '\0';
    path[strlen(path) - 7] = '\0';
    strcpy(command, path);
    strcat(command, "/update.sh");
    system(command);// up to this point, I created the command to run the update script and ran it.

}

問題は次のとおりです。

問題:いくつかの単純なコマンド (つまり、いくつかの単純なコマンド)をスクリプトに入れた最初の更新ではupdate.sh、うまく機能します。このスクリプトに、アーカイブの抽出、 、 、 でのコンパイルを行うコマンドをいくつか入れると./configuremakeスクリプトmake installは特定のポイントで永久にハングします。

具体的には、更新アーカイブには、抽出してインストールする必要がある6 つのtar.bzアーカイブがあります。最初の 5 つのアーカイブでは問題なく動作しますが、スクリプトがtar.bzの 6 番目のインストールのポイントに到達すると、ハングアップします。このスクリプトを端末から直接実行すると、問題なく正常に動作します。

質問: この問題を解決するための考えを持っている人はいますか?

注: より具体的な詳細やスクリプトの内容が必要な場合は、お知らせください。

N.B1。root としてupdate Cプログラムを実行します。

4

2 に答える 2

1

出力をリダイレクトすることで問題が解決したと言ったので、なぜuser829755の答えがうまくいかなかったのかわかりません/dev/null

何かが標準入力から読み取ろうとしている場合、</dev/null通常はそれを修正します。

于 2013-06-20T01:29:48.067 に答える