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で質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Windows 10 Windowsのタイムスケジューラーについての質問です。 先日、Webスクレイピング用のプログラムを 1 2022/09/28 05:51
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- Excel(エクセル) Excelの関数で実現可能か知りたいです 5 2023/08/06 08:58
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBプログラムから「管理者とし...
-
ACCESSでタイトルバーを非表示...
-
Java getRuntime().exec() で...
-
Javaプログラムでコマンド実行...
-
jarファイルをバッチで実行させ...
-
コマンドプロンプトが使えない
-
eclipseからのターミナル実行方...
-
ACCESS VBA からエクセルを最小化
-
batよりjava起動
-
windowsのタスクスケジューラを...
-
javaでコマンド・プロンプトで...
-
windows power shell icacl
-
ブレークポイントを設置してな...
-
Eclipseで、プロジェクト名のと...
-
html上で、バッチやexeファイル...
-
Eclipseのアンインストールの仕方
-
eclipseでスタックサイズを変更...
-
正しいURL指定しているにもかか...
-
Eclipse「リフレッシュ」と「ク...
-
JAVAにのeclipseに関する質問で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでタイトルバーを非表示...
-
VBプログラムから「管理者とし...
-
CloudSticky.jarが起動しない。
-
jarファイルをバッチで実行させ...
-
batよりjava起動
-
ShellExecuteの使い方について
-
32bitアプリから64bitアプリの...
-
Java VM のヒープサイズについて
-
C#からバッチファイルを起動で
-
windows power shell icacl
-
ACCESS VBA からエクセルを最小化
-
ブレークポイントを設置してな...
-
Javaプログラムでコマンド実行...
-
SYSTEM関数等を用いて複数のコ...
-
MacOS:ターミナルではNPMのコ...
-
JAVA バッチファイルの作成・...
-
javaからバッチファイル実行
-
コマンドを実行してコマンドラ...
-
windowsのタスクスケジューラを...
-
実行したらがメモ帳出て来てしまう
おすすめ情報