• ベストアンサー

system()に関して

C言語system()の使用方法に関する質問です。 以下の形式にてsystem()を使用した場合 system()にて実行しているコマンドではなく system()自体のエラー発生時に エラーコードの取得は可能でしょうか。 ret_code = system( buf ); ret_code = WEXITSTATUS(ret_code); free( buf ); return ret_code; 以上ご教授の程よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • MetalKing
  • ベストアンサー率57% (15/26)
回答No.1

環境によって微妙に違いがあるようですが... 戻り値が – 1(あるいは負)の場合はエラーを示し、グローバル変数 errno にエラー要因 というのが多いようです

関連するQ&A

  • 複数同時実行時の参照先について

    皆さんこんにちわ。 以下のプログラムを複数同時に実行した場合 あるプロセスにおいて、別プロセスと同じ bufの参照先に格納された文字列 を取得して実行してしまう現象が発生しております。 以下のソースについて何か問題のある部分 はございましたら教えて頂きたく思います。 よろしくお願い致します。 int m_create_process( char *command_line, bool sync ) { int command_len = strlen( command_line ); int ret_code = 0; char *buf = NULL; if ( (buf = (char *)malloc( (command_len + 10) * sizeof(char) )) == NULL ) { // malloc error! return -1; } strcpy( buf, command_line ); if ( !sync ) { strcat( buf, " &" ); } ret_code = system( buf ); ret_code = WEXITSTATUS(ret_code); free( buf ); return ret_code; }

  • Perlで特定のコマンドを実行させるには?

    Perlでコマンドを実行させようと考えておりますが、 Windows版では $ret = ''; $ret = system 'echo', 'test ok!'; で正しく実行されましたが、 Linuxでは $ret = ''; $ret = system '/sbin/service', 'httpd stop'; で、認識できないコマンドとなりエラーになりました。 通常のコマンドラインでは /sbin/service httpd stopは動作します。 Linuxコマンドを実行させたいのですが、何かミスをしているのでしょうか?

    • ベストアンサー
    • Perl
  • ディスクの空き容量を取得するシステム関数はありますか?

    ディスクの空き容量を取得するシステム関数はありますか? dfコマンドで、ディスクの空き容量を取得できますが、 このdfコマンドに相当するシステム関数はありますでしょうか? やりたいことは、例えば、/etc/varのディレクトリの空き容量がどれくらいあるかを取得したい ということです。 dfコマンドにより上記は、実現出来ますが、直接C言語から呼び出すことが可能なシステム関数があれば と思い質問しました。 上記に該当するシステム関数がない場合はsystem関数を使用してdfを実行する予定ですが、それは最後の手段と考えています。 OSはintel版solarisで使用する予定ですが、linux前提でもかまいません。

  • ksh(Korn Shell)の文法を確認させてください。

    以下のプログラムに文法的な誤りはないでしょうか? よろしくお願いします。 #!/bin/ksh # コマンドの呼び出し abc.sh # コマンドの戻り値の取得 ret=$? # エラーコードの変換 if $ret=1 then ret=8 fi # 戻り値の返却 exit $ret

  • iconv_open失敗

    いつもお世話になっております。 OpenIndiana NetBeansIDE 7.1でc++のプログラミングをしているのですが、下記コードで SHIFT-JISを指定すると iconv open: Invalid argument となってしまいます。 SHIFT-JISの文字コード関係の何かのインストール等が不足しているのでしょうか。 locale -a というコマンドを実行してみたのですが、 UTF-8に関係しそうなものは入っていたのですが、SHIFT-JIS(PCK?) のようなものは入ってなさそうでした。 どなたかご教授よろしくお願いいたします。 どなたかご教授よろしくお願いいたします。 int main(int argc, char** argv) { int ret; // ret = convert("UTF-8", "EUC-JP",//成功 // ret = convert("UTF-8", "SHIFT_JIS", ret = convert("UTF-8", "SHIFT-JIS", "日本語テストメッセージおはよう", outbuf, sizeof(outbuf)); if (ret) { printf("%s\n", outbuf); } else { printf("Oops!\n"); } return 0; } int convert(char const *src, char const *dest, char const *text, char *buf, size_t bufsize) { iconv_t cd; size_t srclen, destlen; size_t ret; cd = iconv_open(dest, src); if (cd == (iconv_t)-1) { perror("iconv open"); return 0; } srclen = strlen(text); destlen = bufsize - 1; memset(buf, '\0', bufsize); ret = iconv(cd, &text, &srclen, &buf, &destlen); if (ret == -1) { perror("iconv"); return 0; } iconv_close(cd); return 1; }

  • シェルプログラミングについて

    リモート側のファイルリストをローカル側に作成したいです。 なお、rshのリターンコードと、findのリターンコードを取得し、 コマンドの成功・失敗を判断したいので 以下のコマンドで試してみましたが、うまくいきません。 ------------------------------------------------------- return_code=`rsh testhost -n find /user/target >list "; echo \\$?"` remote_returncode=$? ------------------------------------------------------- リスト自体は、正しく作成していますが、 findコマンドのリターンコードが変数return_codeに代入されていないようです。 ここが間違っている、もしくは、他に良い記述があれば教えていただきたいです。

  • PHP、exec関数のreturn_varの値

    このようなコードをPHPから実行させています。 ******************** $com = 'convert -version'; $out = array(); $ret = 0; exec($com, $out, $ret); echo '$out = ' . var_export($out); echo '$ret = ' . var_export($ret); ******************** この結果なのですが、 -------------------- $out = array ( ) $ret = 5 -------------------- ということで、うまくコマンドが動いてくれていないのですが、 return_varにあたる$ret=5は、何を意味してくれているのでしょうか? 127ならちょいちょう検索ヒットするんですけどね……。 ご存知の方、よろしくお願いします。

    • 締切済み
    • PHP
  • オペレーティングシステムエラー

    forrtle: severe(172):Program Exception - exception code = 0x1e (30) というエラーが出ました。 エラーコードを検索したところ、オペレーティングシステムのエラーとのことですが・・ 『オペレーティングシステム』って何だろ!?って思ってしまいました。 ここでいう『オペレーションシステム』ってのは使っているソフトのことなのでしょうか?それとも、コード(主プログラム又はサブルーチン)に異状があるのでしょうか? 教えて下さい。

  • system関数のエラー検出

    UNIXのmanで調べたところ、system関数(コマンド)はエラー時、-1をかえし、errnoに"EAGAIN","EINTR","ENOMEN"を代入するようなのですが、 実際にプログラムにくみこんでみると、1を返しているようです。 (systemで実行するコマンド名をわざと間違えて実行しています。) これでは、systemで実行しようとしているコマンドが1を返しているのか、systemでエラーが起きているのか判断できません。 どのように判定すればよいのでしょうか。

  • systemをrootで実行したい

    初めて質問します。 LinuxのPHPで、system関数を使ってコマンドを実行したいのですが、 特定のシステムを設定するコマンドはエラーになります。 (ファイルリストとかは問題なく実行できるのですが・・。) たぶんroot権限がないからですよね? root権限が必要なコマンドを実行するにはどんな方法があるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう