2012-02-06 113 views
0

在我的應用程序,我想實現這樣的事情:c等待stdin讀取?

我有:

  • 數據0,數據1,數據2,...數據n。
  • 一些參數傳遞

流量:

  1. 與一些參數啓動程序和寫入數據0到標準輸入
  2. 的程序執行根據所傳遞的數據計算「數據0」和參數
  3. 「等待」新的標準輸入和(清除舊的標準輸入,緩衝區和變量?)
  4. 重複1〜2當我把數據1,數據2 ...等等
  5. 當達到數據n,終止(或者如果我輸入中止代碼給stdin,告訴程序終止)。

也許是這樣的(僞代碼):

int main(int argc, char *argv[]) 
{ 
get parameters(); 
int fslen = data size 
char *c = (char *)malloc(fslen); 
fgets(c, fslen, stdin); 

while((c != null) || (c != Terminate code?)) 
{  
    do calculations with int c; 
    clear c; 
} 
return 0; 
} 

或者是他們的一個更好的方法?

還是這樣做是不好的做法? 如果是這樣,請解釋

回答

1

至少就我所知,實際上沒有更好的方法來讀取和解析行輸入,而不是讀取和解析行輸入。

默認情況下,stdin應該是阻塞的,所以您的「等待」標準應該被自動處理。

你會的,但是,需要兩個循環,如果你將要讀線,然後解析線代碼:

int main(int argc, char *argv[]) 
{ 
    /* initial parameter/buffer setup goes here */ 

    while (fgets(buffer, bufferlen, stdin)) { 
     for (c = buffer; *c != '\0' && *c != terminatingcode; c++) { 
      /* calculations go here! ... they sure do! </homer> */ 
     } 
     if (*c == terminatingcode || ferror(stdin)) 
      break; 
    } 
} 

要知道,與fgets()可以「不及格」這裏完全無辜原因,並且您需要熟悉feof()和ferror()以確保正確使用接口;我不確定我在上面的代碼中的使用是否與你想要/需要的代碼一致。

+0

這正是我想要的!感謝你的回答;無論如何,我可以通過標準輸入阻止嗎?如:data 0 - > 20sec - > data 1 - > 16.2sec - > ... – tom91136 2012-02-10 12:03:02

+1

當然;你可以熟悉gettimeofday(2)和朋友,並開始從你得到的timeval結構中減去秒/微秒。 – tbert 2012-02-10 12:08:49