0

私はC言語を学ぶ初心者です:-)

これを解決する方法をstackoverflowで検索しましたが、理解できません。:-(

このスレッドを投稿する前に、私は常に stdout をファイルにリダイレクトし、それを使用して文字列に読み取りますfread

system ("print.exe > tempfile.tmp");
FILE *fp = fopen ( tempfile.tmp , "rb" );
char Str[Buf_Size];
fread (Str,sizeof(char),Buf_Size,fp);

そうすると、ファイル I/O で多くの時間が浪費されます。

一時ファイルにリダイレクトせずに、stdout を C 言語の文字列にリダイレクトするにはどうすればよいですか?

出来ますか?ありがとう。

環境: Windows and GCC

4

2 に答える 2

1

Unix では、次のようにします。

  • 作成するpipe
  • fork子プロセス
  • 親:
    • パイプの書き込み側を閉じます
    • パイプからの読み取りを開始します
  • 子供:
    • パイプの読み取り側を閉じます
    • 閉店stdout
    • dup2は fd 1 への書き込み終了パイプです
    • execは新しいプログラムです
于 2013-10-10T06:51:46.067 に答える
1

stdout は、 popenルーチンを介してリダイレクトできます。

#include <stdio.h>
...


FILE *fp;
int status;
char path[PATH_MAX];


fp = popen("ls *", "r");
if (fp == NULL)
    /* Handle error */;


while (fgets(path, PATH_MAX, fp) != NULL)
    printf("%s", path);


status = pclose(fp);
if (status == -1) {
    /* Error reported by pclose() */
    ...
} else {
    /* Use macros described under wait() to inspect `status' in order
   to determine success/failure of command executed by popen() */
   ...
}
于 2013-10-10T06:52:12.850 に答える