• 締切済み

popen使用時のエラー出力を出さないようにしたい (Solaris C言語)

AAA/a というファイルがなかった場合 (1)poepn("ls AAA/a", "r" ); (2)poepn("ls AAA*/a", "r" ); を実行した時のそれぞれの出力メッセージは (1)AAA/a: ファイルもディレクトリもありません。 (2)/bin/ls: No match. となります。そこで、2> /dev/null を付け足して実行すると、(1)のエラーメッセージは消えるんですが、(2)の場合のエラーメッセージは出てしまいます。 (1)の場合も(2)の場合もエラーメッセージを出さないようにする方法ってありますか?

みんなの回答

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

私の所では再現できませんでした( (2)でも(1)と同じ結果になる)。 回避策は、目的によって異なると思いますが、、、 一般的に考えられる方法としては、 ・popen(),pclose() の代わりに pipe(),fork(),execlp()等を使う ・popen()のコマンドの出力は一旦バッファにため込み、pclose()の返り値を見てから処理する などがあると思います。

関連するQ&A

  • popen使用時のエラー出力を出したくない

    popen( "コマンド", "r" ); このときコマンド実行時のエラー出力を出さないようにしたんですけど、 popen( "コマンド >& /dev/null", "r" ); とすると、 sh: /def/null: 番号が正しくありません。 となってしまいます。 これは、どういうエラーなんでしょうか? とにかく、プロンプトに余計なエラーを出したくないのですが、どうすれば消えるでしょうか?

  • cshでエラー出力を出さないようにしたい

    set AAA = `ls *.aaa` とした時に、aaaと名のつくファイルが無かったら、 ls: No match. 一致しません。 となってしまうんですが、これを出力させないようにするにはどうすばいいでしょうか?

  • Cシェルについて

    Cシェルについて #! /bin/csh ##! /bin/csh -vx setenv NOHUP '/usr/bin/nohup' set AAA_CSH = $NOHUP' XXX.sh file.txt &' ($AAA_CSH >> /dev/null) >>& err.log シェルスクリプトを作成して上記のとおりnohupでXXX.shを実行するように記述します。 エラーがあった場合、err.logに出力するように作成したつもりなのですが、 XXX.shがなかったとき、 「/usr/bin/nohup: XXX.sh:そのようなファイルまたはディレクトリはありません。」 と標準出力されてしまいます。 このエラーメッセージをerr.logに記述するようにしたいのですが、 どうしたらよいでしょうか? よろしくお願いいたします。

  • system関数でCシェルコマンドを実行した時のエラー抑制

    CシェルコマンドをPerl上でsystem関数を使用し実行した時の、 エラーメッセージ抑制について教えてください。 ディレクトリ(DIR1をDIR2に)をコピーする際、 下記のようにしました。 system("cp -r DIR1 DIR2"); ここでもし、なんらかの原因でコピー失敗した場合、 「DIR1がありません。」などと、エラーメッセージが出力されます。 Cシェルでこの様なエラーメッセージを抑制するには cp -r DIR1 DIR2 >& /dev/null と、 することによって、エラーメッセージの抑制は可能になります。 これと、同じ事をPerlで行いたいと思っています。 ご回答よろしくお願いします

  • /dev/nullを削除できない

    OS:Redhat Linux ES 5.0 /dev/nullファイルのパーミッションがcrw-rw-rw- からsrwxr-xr-xに 変わってしまい、mknodで作り直そうと思いましたが、どうしても /dev/nullファイルを削除できませんので作り直せない状態です。 # rm -rf /dev/null <-エラーメッセージはない #ls -l /dev/null -rw-r--r-- 1 root root 0 7月 17 11:36 /dev/null <-パーミッションが変わっている #mknod -m 666 /dev/null c 1 3 mknod: `/dev/null': ファイルが存在します # どのようにすれば/dev/nullを作り直せるのでしょうか?

  • UTF-8と標準エラー出力について

    LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8 上記環境変数において # ls aaa ls: aaa: そのようなファイルやディレクトリはありません # man aaa aaa 、ホ・????奢・・??「、熙゛、サ、」 のように、lsのエラー結果はUTF-8で表示されているのですが、manのエラー結果はEUC-JPで表示されています。 これらの違いは、コマンド固有の問題なのでしょうか。 また、何か解決する方法はあるのでしょうか? 以上、よろしくお願いします。

  • _popen() のエラー取得

    WindowsNT/2000で_popen()を利用してコマンドを実行しているのですが、その際のメッセージを取得したいのですが、通常のメッセージは取得出来るのですが、エラーメッセージが取得出来ません。どうすればよいのでしょうか? 現在のソースは下記のようです。 int main(int argc, char* argv[]) { char str[512],*ptr; FILE *fp; if((fp = _popen("dir b:","rt")) == NULL) { fprintf( stderr , "error!!!\n"); return -1; } while(1) { fgets(str,512,fp); if(feof(fp)) { break; } ptr = strchr(str,'\n'); if(ptr != NULL) { *ptr='\0'; } printf("%s\n",str); } _pclose(fp); return 0; }

  • crontabでPHPスクリプトが実行出来ない

    crontabで毎分PHPのスクリプトを起動する記述をしましたが、すべて下記エラーが出て実行されません。 phpスクリプトの先頭で「#!bin/usr/php」を書く方法と、crontabで「* * * * * /usr/bin/php test.php > dev/null」とする方法を試してみましたが両方ともダメでした。 解決索があればご教示下さい。 【エラー内容】 test.php: line 1: ?php: No such file or directory

    • ベストアンサー
    • PHP
  • popen使用時の実行速度

    お世話になります。1000以上のファイルがあるディレクトリを再帰的に走査するのに、 fp = _popen("dir /s /b *.jpg", "r"); while (fgets(fn, sizeof(fn), fp) != NULL) { //処理内容 } _pclose(fp); のようにしました。ここでint型の変数をインクリメントして100毎に表示させて実行速度を確認すると、明らかに後になるほど速度が低下していました。 タスクマネージャーで確認しましたが、メモリも一定でメモリリークを起こしているわけでも無いようです。 原因は何でしょうか?

  • このコマンド文の意味を教えてください。

    bashを使っていて、以下のようなコマンドを見る機会がありました。 */30 10-20 * * * nice /php/bin/php $HOME/project1/dev/bin/cron_update.php > /dev/null いくつか分からない点があったので、質問させてください。 1. 頭の、*/30 10-20 *** は、どういう意味でしょうか?? 2. nice は命令の実行順序を指定するコマンドのようですが、ここでは/php/bin/php の次に$HOME/project1/dev/bin/cron_he_photo_index_update_queue.php と来ています。/php/bin/php というのがただのディレクトリのような気がするのですが、これを最初に実行、というのはどういう意味なのでしょうか。 3.>でリダイレクトしていますが、ディレクトリにリダイレクトしているように見えます。ファイルにリダイレクトするものなら扱ったことがあるので分かるのですが、ディレクトリにリダイレクトというのは、何がディレクトリに出力されるのでしょうか。 以上、ご教示頂けると幸いです。

専門家に質問してみよう