11

C ++コードからコマンドラインと通信するために、次のコードを試しました。

#include<iostream>
#include<cv.h>

int main()
{
    system("gnome-terminal");
    system("cd");
}

gnome-terminalコマンドは正常に実行されています。しかし、ターミナルを閉じた後、CDが実行されることを期待しているときは、発生していません。手伝って理由を教えていただけませんか。ありがとう。cmdをホームディレクトリに移動させる関数を期待していましたが、そうではありませんでした。Linuxで働いています

gnomeを削除しても試してみました。単純なCDが機能していません。私は何か間違ったことをしていますか>?

lsを試してみると、うまく機能しているようです。

私の主な目的は、新しい端末を開き、新しい端末を開いた現在のプログラムを介して、その新しい端末でコマンドを実行することです。どうすればこれを達成できるか教えていただけますか?

4

3 に答える 3

11

プログラムを実行し、次の行を実行する前に終了するのを待ちたい場合は、このページとサンプル コードを参照してください: http://www.thegeekstuff.com/2012/03/c-process-control-functions /

ただし、gnome-terminal を実行し、新しく作成したウィンドウでコマンドを実行する場合は、次のようにします。

system("gnome-terminal -x sh -c 'cd /tmp ; ls -la'");
于 2013-01-26T00:39:50.833 に答える
7

このsystem関数は、指定されたコマンドを実行するためのシェル子プロセスを作成します。

cdそのシェルプロセスの現在の作業ディレクトリのみを変更するシェルコマンドです。

したがって、子はcdおそらく正常に機能しますが、別のプロセスであるC++プログラムには影響しません。

代わりに、Linuxシステムコールを確認することをお勧めしますchdir

于 2013-01-26T00:38:33.400 に答える
0

ご協力いただきありがとうございます!!このコマンドは、このリンクから完全に正常に機能しました

https://superuser.com/questions/198015/open-gnome-terminal-programmatically-and-execute-commands-after-bashrc-was-execu

    gnome-terminal -x sh -c 'command1; command2; exec bash'

新しいウィンドウにそれぞれのコマンドを入力しました。しかし、シェルの作業ディレクトリを変更するには、作業中です。私はまだそれを理解していません。

于 2013-01-26T01:05:53.730 に答える