No.1ベストアンサー
- 回答日時:
Perlじゃないんだからそういう書き方しても
interpolationしてくれませんから。
ということで、
char cmd[64]; //サイズは適当に調整してください
snprintf(cmd, sizeof cmd, "%s", argv[1]);
とか
strlcpy(cmd, argv[1], sizeof cmd);
して
popen(cmd, "r");
と実行。
それから、ユーザーから入力をもらって
それをノーチェックで実行するのは
*とっても危険*ですので、ちゃんとチェックしましょう。
ちゃんと動作できました。ありがとうございます!
後学のために聞きたいんですが、どうしてチェックしないと「とっても危険」なのでしょうか??
No.4
- 回答日時:
> 後学のために聞きたいんですが、どうしてチェックしないと「とっても危険」なのでしょうか??
たとえばの話 rm -rf / とか渡されたらどうします?(笑)
これはファイルやディレクトリのパーミッションで
助かるかもしれませんが、いずれにしろ
ナニが入ってくるかわからないわけですから、
きちんとチェックしましょうね、ということです。
ってまあどういうチェックをどこまでやるとの言うのは
結構面倒な問題だったりするのですが。
あと、渡されるコマンドの出力をどうしたいのかが
わからなかったので#1の回答では popenをそのまま使いましたが、
単にコマンドが実行できれば良いということなら、
#2のzwiさんの書かれたとおりで、systemなり
何なりを使った方が良いです。
解答していただいた皆さん、本当にありがとうございました。
とっても参考になりました。
なぜpopenなのかなんですが、、自分の見たサイトではsystemよりpopenの方がよいと書いてあったからです。(私の解釈ミスかもしれませんが)
systemで出来ました。確かにこっちの方が良さそうですね。
危険性などについての解答もありがとうございました。
また機会があればよろしくお願いいたします。
No.3
- 回答日時:
>後学のために聞きたいんですが、どうしてチェックしないと「とっても危険」なのでしょうか??
自分のコンピュータに自分で入力するのなら直接コマンド入力するのと変わりないでそれほど問題にはなりにくいです。でも使用できるコマンドに制限をつけるとかチェックは入れておいたほうが良いでしょう。
問題なのはその入力が他人からされる可能性のあるもので、悪意のあるコマンドでファイルの内容を読まれたりファイルを書き換えられたり削除されたりする危険性が有ります。
インターネットの初期ではこういう脆弱性のあるCGIが結構ありました。
No.2
- 回答日時:
popen(Argv[1],"r")で実行できると思います。
しかしなぜpopenなのでしょうか?パイプを使いますか?
ただ起動したいだけならsystem(Argv[1])だと思うのですが。
ちなみにWindowsだと"ShellExecute"とかを使います。
http://msdn.microsoft.com/library/ja/default.asp …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでタイトルバーを非表示...
-
staticのメモリ共有について
-
VBプログラムから「管理者とし...
-
Javaでping
-
SYSTEM関数等を用いて複数のコ...
-
Java VM のヒープサイズについて
-
batよりjava起動
-
ShellExecuteでDOSコマンド実行...
-
ブレークポイントを設置してな...
-
ShellExecuteEx関数の使い方に...
-
GDB デバッガでの変数の表示に...
-
コマンドを実行してコマンドラ...
-
ACCESS VBA からエクセルを最小化
-
MacOS:ターミナルではNPMのコ...
-
ShellExecuteの使い方について
-
CloudSticky.jarが起動しない。
-
Eclipseで、プロジェクト名のと...
-
split関数で区切り文字がない場合
-
jdbcでinsert,delete,createをe...
-
html上で、バッチやexeファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBプログラムから「管理者とし...
-
ACCESSでタイトルバーを非表示...
-
jarファイルをバッチで実行させ...
-
ShellExecuteの使い方について
-
batよりjava起動
-
windowsのタスクスケジューラを...
-
32bitアプリから64bitアプリの...
-
windows power shell icacl
-
SYSTEM関数等を用いて複数のコ...
-
CloudSticky.jarが起動しない。
-
MacOS:ターミナルではNPMのコ...
-
C# コマンドプロンプト画面で表...
-
ACCESS VBA からエクセルを最小化
-
Javaプログラムでコマンド実行...
-
Java VM のヒープサイズについて
-
Tomcatのメモリー使用量が知りたい
-
「SimpleEntry を型に解決でき...
-
C++ で DIR コマンド
-
Java 特定プロセス名前取得方法...
-
staticのメモリ共有について
おすすめ情報