2013-10-10 62 views
0

我在學習C語言:-)如何標準輸出重定向到一個字符串在ANSI C

...我已經尋找如何在計算器解決這個初學者,但沒有什麼我能理解。 :-(

之前發佈這個線程,我總是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。

我怎麼能標準輸出重定向到C語言的字符串不重定向到一個臨時文件?

這可能嗎?謝謝。

環境: Windows and GCC

+0

Linux還是Windows? –

+2

如果你使用的是POSIX-ish環境,你可以通過'FILE * fp = popen(「print.exe」,「r」);'讀取'print.exe'的輸出。如果您使用的是Microsoft-ish系統,則可以使用'_popen()'代替'popen()'。 –

+0

@Jonathon Reinhart in windows –

回答

1

在Unix中,你會:

  • 創建pipe
  • fork一個子進程
  • 父:
    • 關閉管道的書寫端
    • 開始從管道讀數
  • 孩子:
    • 關閉管道
    • 關閉的讀取結束stdout
    • dup2的寫入終止管道的fd 1
    • exec的新方案
+0

我該怎麼辦在windows? –

+1

請參閱此主題http://stackoverflow.com/questions/450865/what-is-the-equivalent-to-posix-popen-in-the-win32-api – yegorich

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() */ 
    ... 
} 
相關問題