2012-02-06 85 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