• ベストアンサー

system関数のエラー検出

atonの回答

  • aton
  • ベストアンサー率47% (160/334)
回答No.1

 私も調べてみましたが,いまいちはっきりわからなかったので,以下想像です。  manの記述は,fork()またはexec()で失敗したときのみ-1を返すというようにも読めるので,この場合はshの終了ステータスが返ってきてるのではないでしょうか? shのmanページでは,0以外は何らかのエラーということのようです。  あるいはsystem()と同じライブラリー(stdlib.h)に定義されている EXIT_FAILURE が返ってきているのかもしれません。ちなみにこの場合もうまくいったことを表すと思われる EXIT_SUCCESS の値は0です。  というわけで,あまりお役に立ちそうもない情報ですが,いずれにせよ 0 が成功でそれ以外は失敗として扱うことにしてみてはいかがでしょうか。

noname#794
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • UNIX-Cのsystem関数でエラーを捕捉したい

    やりたいことは以下のことです。 ◎ユーザーはguestです。 unixのコマンドラインから、 dateコマンドで以下のように入力すると、 root権限がない場合はエラーが返って来ます。 guest@host>date 0516201006 (2006年5月16日20時10分に時刻を設定) root権限がありません。 bindが失敗します。 ◎ユーザーはguestのままです。 これをCプログラムの中で、 system("date 0516201006"); とやってもエラーはコマンドラインの方に表示されて、 プログラムの中では捕まえることが出来ません。 system命令ではなくて、popen命令を使用しても構いません。 プログラムの中で捕まえる方法を知りたいです。 errno表示でもperrorでもダメでした。 よろしくお願いいたします。

  • system関数

    以下のように、phpでsystem関数を用いて $command = "php4 -q <ファイル名>.php"; system($command); コマンドラインからプログラムを実行していたんですが、ファイルを別サーバに移動させたところ、 実行できなくなりました。 双方ともphpのバージョンは4.0.6、 コマンドラインからphpを実行できるように設定されています。 変わった点はapacheのuserがnobodyから 他の名前に変更されています。 やはり、実行できないのはapacheのuserが変更されたのが 原因なのでしょうか? もし、そうならばどのように対処すればよいのでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • system関数に日本語の引数を渡すことは出来ますか

    UNIXのsystem関数を使ってコマンドを起動する際、そのコマンドに日本語の引数を渡すことは出来ますか。 例えば、2バイト目に「0x60(`):逆引用符」を含む文字を引数に指定すると、"syntax error"となります。 シェルが、逆引用符を別コマンドの実行と誤解しているからとも思えますが、はっきりしません。 よろしくお願いします。

  • SYSTEM関数等を用いて複数のコマンドを打ち込みたい

    こんばんは。C言語初心者のjovanといいます。 初心者のため拙い文章になってしまう可能性があることを初めにお詫びしておきます。 現在SYSTEM関数を使って、コマンドプロンプトでコマンドを実行するプログラムを作成しているのですが、少々困ったことになりました。 というのも、 SYSTEM("cl c:\\temp.c"); などと打ち込むと、ダブルクォーテーション内の記述がコマンドプロンプト上で実行され、コマンドプロンプトが終了されますよね? 私がやりたいのはそれだけではなく、(1)コンパイラをロードし、(2)フォルダを移動し、(3)コンパイルというような動作をコマンドプロンプト上で行わせたいのです。 しかしながら、この3つの動作をSYSTEM関数だけで処理するのは、SYSTEM関数は、1つのコマンドがコマンドプロンプトで実行されるとコマンドプロンプトが終了してしまうという性質上不可能だと思います。少なくとも私の知識上では無理です。 というわけで、SYSTEM関数、または他の関数でもいいのですが、コマンドプロンプト上で複数のコマンドを実行するプログラムはどのように作成したらよいのかを教えてくださると幸いです。

  • visual studioでsystem関数

    visual studio 2005でsystem関数を使っていました. system("notepad"); は難なく実行できました. 他の実行ファイルも実行できるかと思い 「C:\Program Files\IrfanView」にある「i_view32.exe」を実行しようと思い, system("i_view32.exe"); で「デバックなしで開始」で実行させたところ 'i_view32.exe'は,内部コマンドまたは外部コマンド, 操作可能なプログラムまたはバッチ ファイルとして認識されていません. とエラーが出ました. もちろんC:\Program Files\IrfanViewのPATHは通してあります. しかしDebugフォルダにあるプログラムの実行ファイルをクリックで実行させたところ普通にi_view32.exeは起動しました. 「デバックなしで開始」で起動させたいのですがどうすればよいのでしょうか? 分かる方いたらよろしくお願いします.

  • system関数でのシェル起動について

    system関数でシェルコマンドを発行しているC言語のプログラムがあります。 起動されるシェルコマンド(Cシェル)は2重起動防止のため以下の様にコマンド名をgrepしてPIDを取得し、2つ以上あると2重起動と見なしてコマンドを終了させています。 ps -aef | grep 自身のコマンド名 | grep -v grep ~ この時1回目の起動であるのに2重起動チェックに引っかかってしまいコマンドが実行されませんでした。 デバッグしたところ"csh コマンド名"のPIDとは別に一瞬"sh -c コマンド名"というプロセスがあってそれのPIDと合わせて2つに起動していると見なしていました。 調べたところsystem関数はsh経由(sh -c)でコマンドを実行するためだと言う事が分かり納得出来ました。 また元々バックグラウンドで起動させたいコマンドだったので以下の様に"&"を付与したところ2重起動チェックには引っかからなくなりました。 system("コマンド名 &") バックグラウンド起動させても2重起動チェックで弾かれれば納得出来るのですが、通常の起動と何が違うか分からずに釈然としません。 良く分かりませんが、通常起動だとオーバーヘッドで実行に時間がかかりチェックで弾かれるけど、バックグラウンドだと一瞬で起動されてたまたま上手く行った様に見えるだけだったりするなどなのでしょうか?? もしご存知の方がいらっしゃいましたらご教示頂けると幸いです。

  • Javaで

    C言語ではUNIX上のコマンドを呼ぶには System("呼びたいコマンド");とすればコマンドがプログラムから呼べたと思います。Javaで同じようにUNIX上のコマンドを呼ぶ関数(メソッドっていうのかな?)はなんですか?

  • システムエラー1219について

    (1)システムエラー1219について。起動時に、コマンドnet off システムエラー1219発生という表示が一瞬でます。その後も文字は続いていますが、1秒ぐらいしか表示されませんので、なんと書いてあるのか読取れませんでした。 また、(2)スタートのすべてのプログラムが「表示できないプログラムがいくつかあります。」とも表示されます。この2点を修正したいので、教えて下さい。 ちなみに、パソコン本体のメモリを一度抜いて、差込をしたのですがそれが原因なのでしょうかシステムプロパティには反映していましたが・・・。?(これまで使用していたもので、これまでは特に問題ありませんでした。) 機種は「eMachines/J3032」です。 すみませんが、どなたか教えて下さい!

  • systemをrootで実行したい

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

    • ベストアンサー
    • PHP
  • recvfrom関数の戻り値について

    初めて質問させて頂きます。 現在、LinuxのUnixドメインを使用した内部通信プログラムを 作成しているのですが、recvfrom関数の戻り値で-512という値が 返ってきて頭を悩ませています。 いろいろなHP等でrecvfrom関数の戻り値について記述されている内容は 受信サイズか-1となっているのですが・・・-512という値については さっぱりでした。 -1の場合は、errnoが入るようなのですが、-512の場合、errnoが0のままで何もはいっていないように見えます。 どの様な問題が発生しているかの見当もつかない状態です。 すみませんが、宜しくお願い致します。