外部コマンド実行できるSourceMod Extension作った
https://github.com/kimoto/sourcemod-RunSystemCommand
概要
これを入れるとSourcePawn用のnative関数であるRunSystemCommandが追加されます。これを使うと外部コマンドが実行できるようになります。外部コマンドってのはいわゆるechoとかlsとかシェルスクリプトとかその他もろもろの実行ファイルです。ただし肝心のrunsystemcommand.ext.soってバイナリはこのリポジトリには置いてないので各自コンパイルして下さい。
使い方は簡単で
RunSystemCommand("コマンドの名前", "引数", "出力結果(標準出力)を格納するためのバッファ", "そのバッファのサイズ");
って感じ。実行が成功しようが失敗しょうが標準出力の結果が指定したバッファに格納される。
動く感じの例を書くと
decl String:buffer[256]; RunSystemCommand("ls", "-al", buffer, sizeof(buffer));
こうするとls -alの実行結果がbufferに文字列として格納される。
利用目的
なんでこんなモノ作ったかって言うと、SourcePawnがだるすぎて外部コマンド実行した出力結果使うだけのが楽なんじゃねーのと思ったから。まぁでもはじめてExtension作ったけど、C++普通に普通な感じで使えるので、まぁこれならSourcePawn + Extensionでやったほうが楽そうだなーと思った。Good bye SourcePawn.
実装方法
C++で単にfork/exec/pipe/waitpidしてるだけです