• 締切済み

popenエラー

Dell Latitude E4300 Vista Business package ですが、C の popen を使うと"popen error"となってしまいます。他のDesktopのVistaでは問題なく動作するのですが、何か問題があるのでしょうか。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

C の処理系としては何を使っているのでしょうか? また, 「エラーがおきる (できれば最小限の) 完全なプログラム」を出してもらえないでしょうか. あと, エラーがおきたときに fprintf(stderr, "popen error"); とするとエラーに関する情報が全く得られません. perror("popen"); などとした方がよいでしょう.

czbebe
質問者

補足

Cの処理系はgccです。 プログラムの全文は下記にある前半のプログラムです。 http://www.fireproject.jp/feature/c-language/pipe/open-close.html perror("popen"); を入れましたら popen No error になりましたが、画面には何も出ません。 以上、よろしくお願いします。 include "stdlib.h" #include "stdio.h" #define BUFSIZE 100 /* 出力用関数 */ int output(char *buffer); int main(void) { /* 読み込み用パイプ */ FILE *in_pipe; /* 読み込み用バッファ */ char buffer[BUFSIZE + 1]; int readed_num; /* バッファを初期化 */ memset(buffer,'\0',sizeof(buffer)); /* パイプを読み込みモードで開く */ in_pipe = popen("date","r"); /* 処理は通常のファイルストリームと同様に扱える */ if(in_pipe != NULL){ readed_num = fread(buffer,sizeof(char),BUFSIZE,in_pipe); while(readed_num > 0){ output(buffer); readed_num = fread(buffer,sizeof(char),BUFSIZE,in_pipe); } fflush(stdout); /* 忘れずに閉じる */ pclose(in_pipe); exit(EXIT_SUCCESS); } else { /*fprintf(stderr, "popen error");*/ perror("popen"); } exit(EXIT_FAILURE); } /* 出力用関数 */ int output(char *buffer) { while(*buffer != '\0'){ if(*buffer == ' '){ fprintf(stdout,"\n"); buffer++; }else{ fprintf(stdout,"%c",*buffer++); } } return 0; }

すると、全ての回答が全文表示されます。
回答No.1

超能力者でもない限り、これだけしかない情報で的確に回答するのは無理。 以下の情報を提示てもらわないと回答は不可能です。 ・popenしようとしたコマンドが存在するかどうか ・コマンドプロンプトで、popenしようとしたコマンドを起動できるかどうか ・popenしようとしたコマンドがあるフォルダにパスが通っているかどうか ・popenしようとしたコマンドの実行権があるかどうか ・popenしている部分のソースコード(略さず前後の部分も含めて全部)

czbebe
質問者

補足

プログラムは全ては書けないので一部のみです。 コマンド'date'なので、どこでも実行できます。 http://www.fireproject.jp/feature/c-language/pipe/open-close.html にあるプログラムです。 /* パイプを読み込みモードで開く */ in_pipe = popen("date","r"); /* 処理は通常のファイルストリームと同様に扱える */ if(in_pipe != NULL){ readed_num = fread(buffer,sizeof(char),BUFSIZE,in_pipe); while(readed_num > 0){ output(buffer); readed_num = fread(buffer,sizeof(char),BUFSIZE,in_pipe); } fflush(stdout); /* 忘れずに閉じる */ pclose(in_pipe); exit(EXIT_SUCCESS); } else { fprintf(stderr, "popen error"); % a.exe % popen error msconfigで常駐ソフトを無効にしても同じです。 私が動かしたいアプリも同じエラーになります。

すると、全ての回答が全文表示されます。

関連するQ&A