Windows専用のプログラムを構築しているとすれば、なぜsystem()
への呼び出しは嫌われますか?私がC++でプログラミングを始めて以来、 "システムに触れないでください"という言葉は私が大変聞いたことでした。私はその原則を従順に守ってきましたが、それについては何が悪いですか?system()については何が悪いですか?
答えて
システムコールの中に入れるものは、プログラムを実行するOSによって異なります。だから完全に移植性がありません。また、多くのことが間違っている可能性があります。あなたはただ空中に命令を投げているだけで、すべてがうまくいくことを願っています。エラー処理(たとえば、実行するプログラムが存在しないか、PATHが正しく設定されていないか、権限がないなど)は非常に困難であり、不可能です。
これ以外にも、ほとんどの場合コメント(実際には「ほとんど」、99.999%など)に記載されているように、system
を使用する必要はありません。
"これは完全に移植性がありません。"システム("");私にはかなり可愛い – user1233963
std::system()
は、あなたが望むことを実行するコマンドを信頼する必要があります。この仮定が正当化されているかどうかを検証する方法はありません。たとえば、PATH環境変数の値が異常な場合、標準セットアップとは異なるプログラムが実行される可能性があります。
std::system()
への呼び出しの動作はシステムによって異なります。現在のところ、アプリケーションが他のオペレーティングシステムで実行する必要がないという要件であっても、この要件は変更される可能性があります。 std::system()
は、より移植性の高い方法で(特に初心者で)達成できる目的でよく使用されることを考慮すると、ここでプラットフォームの依存性を導入する必要はありません。
system()
は、OSのコマンドインタープリタを別のプロセスとして起動します。たまには、呼び出し元のプロセス内で直接同じ結果を達成し、さらにそれを制御できるネイティブAPIがあります。
- 1. OverlappingInstancesについて何が悪いですか?
- 2. INT%ebxの何が悪いですか?
- 3. xsl:for-eachについてはどうして悪いですか?
- 4. ハッシュマップの何が悪いです
- 5. epmdポートが開いている最悪のケースは何ですか?
- 6. HTMLの出力が悪いものは何ですか?
- 7. Cの中のpopen()とsystem()の違いは何ですか
- 8. Oracle SYSとSYSTEMの違いは何ですか?
- 9. /system/appと/ data/appの違いは何ですか?
- 10. Bisonスタイル:自分のスタックが悪いですか?グローバルは悪いですか?
- 11. Rubyではリターンステートメントが悪いですか?
- 12. はユニットテストのアプローチが悪いですか?
- 13. MVCはどこが悪いですか?
- 14. TextMateについて何がすばらしいですか?
- 15. 小さなメッセージパーサー、何が悪いですか?
- 16. プロジェクトオイラー問題17 - 何が悪いですか?
- 17. Unixのプログラミング何が悪いの文
- 18. GurusはLD_LIBRARY_PATHが悪いと言っています - 何が代わりですか?
- 19. ifステートメントにelseステートメントがないのは悪いですか?
- 20. URLには非ASCII文字が含まれていますが、SEOには良いか悪いですか?
- 21. "mjsip"について何が起こっていますか?
- 22. 再帰はいつ、なぜ反復よりもパフォーマンスが悪いのですか?
- 23. ダイナミックプログラミングについて知りたいことは何ですか?
- 24. インクリメンタルコンパイルに関して、Scalaでワイルドカードのインポートが悪いですか?
- 25. Djangoが含まれています - 彼らは悪ですか?
- 26. のstd :: foreachのは、これで何が悪い
- 27. MongoDBとLinqの使用についてノルムの方が良いか悪いのですか?
- 28. XML列にXML/JSONを格納するのはいつも悪いですか?
- 29. nodejsの悪い部分または醜い部分は何ですか
- 30. 「ストリング・バッシング」とは何ですか?それはなぜ悪いですか?
さらに、人々が 'system()'に入れたいと思っていることは、通常、スクリーンをクリアするか、一時停止するようなものです。これは、実際のコードでもっとうまくやっていくことをやるための、怠惰で最適な方法として使われる傾向があります。 –
あなたが間違っていて、非安定化されたユーザー入力を渡すと、アプリケーションを開いてインジェクションの脆弱性を突き止めることができます。攻撃者はアプリケーションと同じ権限で任意のコマンドを実行できます。 –
何をしているのか分かっているなら、何でもしてください。 – deepmax