
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ランキング
-
batよりjava起動
-
実行したらがメモ帳出て来てしまう
-
MacOS:ターミナルではNPMのコ...
-
VBプログラムから「管理者とし...
-
ShellExecuteでDOSコマンド実行...
-
ShellExecuteの使い方について
-
バッチファイルの書き方について
-
SYSTEM関数等を用いて複数のコ...
-
CloudSticky.jarが起動しない。
-
windowsのタスクスケジューラを...
-
LinuxでJavaプログラムを起動
-
コンパイルできません
-
ACCESSでタイトルバーを非表示...
-
Eclipseで、プロジェクト名のと...
-
Eclipse・プロジェクトで、フォ...
-
Eclipse(JAVA)のデバッグで他...
-
Eclipseのアンインストールの仕方
-
html上で、バッチやexeファイル...
-
eclipseのショトカットキー
-
この <windows.h> はどこに在る...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBプログラムから「管理者とし...
-
CloudSticky.jarが起動しない。
-
MacOS:ターミナルではNPMのコ...
-
jarファイルをバッチで実行させ...
-
batよりjava起動
-
windowsのタスクスケジューラを...
-
SYSTEM関数等を用いて複数のコ...
-
windows power shell icacl
-
ACCESSでタイトルバーを非表示...
-
バッチファイルの書き方について
-
32bitアプリから64bitアプリの...
-
Tomcatのメモリー使用量が知りたい
-
ShellExecuteの使い方について
-
MAC OS X) JREのパスが知りたい
-
Java 特定プロセス名前取得方法...
-
JBoss(Linux)を自動起動でき...
-
C# コマンドプロンプト画面で表...
-
「SimpleEntry を型に解決でき...
-
VB6.0 ラベルが文字化け
-
外部コマンドを実行する方法
おすすめ情報