web-dev-qa-db-ja.com

C ++ Linuxからコマンドラインコードを実行してみてください

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

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

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

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

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

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

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

5

プログラムを実行し、プログラムが終了するのを待ってから次の行を実行する場合は、このページとサンプルコードをご覧ください: http://www.thegeekstuff.com/2012/03/c-process -制御機能/

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

system("gnome-terminal -x sh -c 'cd /tmp ; ls -la'");
8
Vahid Farahmand

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

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

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

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

5
aschepler

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

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

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

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

0