2017-05-17 8 views
0

まあ、私はそれを単純明言します:私はC + +の嘆願です。まだ勉強しようとしています。system()を使用中にコンソールコマンドを非表示にしましたか? C++ Linux

私の質問は、コンソール/端末にコマンドを表示させずに、system()コマンドを使用して端末からコマンドを実行できるかどうかです。

例:私が望むよう

system("sudo service sshd start") ; 
Output: Sudo service sshd start 

system("sudo service sshd start") ; 
output: (Blank) 

注:私はLinux上でいます。

+0

GNU libcの['popen'](https://linux.die.net/man/3/popen)を使用してください。 –

+0

症状を再現できません。私が見ているのは、コマンド自体の出力ではなく、コマンドの出力です。あなたはコマンドの出力を抑止する方法を尋ねていますか?もしそうなら、それはC++とは関係ありません。 – rici

+0

C++で "system"を呼び出すときにコンソールを無効にすることができます(http://stackoverflow.com/questions/1802471/supress-console-when-calling-system-in-c) – CaptainTrunky

答えて

1

system標準ライブラリ関数はサブシェルを起動し、提供された文字列をそのサブシェル内のコマンドとして実行します。 (サブシェルは単にシェルインタプリタを実行するプロセスであり、特定のシェルインタプリタはsystemによって呼び出されますが、システムによって異なります)少なくとも、UNIXシステムやUnix系システムでは使用しません)

system関数は、サブシェルを開始する前にファイル記述子を再割り当てしないので、コマンドは現在の標準入力、出力、およびエラー割り当てで実行されます。多くのコマンドがstdoutおよび/またはstderrに出力され、その出力はsystemによって抑制されません。失敗したコマンドから生じる可能性のあるエラーメッセージを非表示になります。もちろん、

system("sudo service sshd start >>/dev/null 2>>/dev/null") ; 

を、:

コマンドは黙って実行したい場合は、コマンド自体にstdoutと/またはstderrをリダイレクトすることができます0以外であれば戻り値systemをチェックし、エラーメッセージを表示する(または情報を記録する)必要があります。

これは実際には、system呼び出しまたはトリガーしていることとはほとんど関係がありませんあなた自身の実行可能ファイルの中のサブシェル。シェルに直接入力すると、同じコマンドが同じ動作をします。

+0

また、 'system( "sudo service sshd start&>/dev/null"); 'を実行します。短く、まったく同じです。 –

+1

@marccoll: '&>'はbash拡張であり、 'system'が' bash'を起動するという保証はありません。あなたのマシンではうまくいくかもしれませんが、それは一般的には信頼できません。 – rici

関連する問題