在java中运行c timer执行文件

时间:2013-05-11 19:38:00

标签: java c

这个c程序以1秒的间隔打印1到10个数字。这个相同的执行c程序文件(filename.out或filename.exe或./filename)在java运行时运行,但它在10秒后打印1到10个数字interval.I在java运行时执行需要相同的输出格式,即它应该以1秒的间隔打印1到10个。

预先感谢..............

#include<stdio.h>

#include<time.h>     

#include<sys/timeb.h>

int main()

{
int i;
    for(i=1; i<=10; i++)
    {
       printf("%d\n", i);
       sleep(1);
    }   
} //main

Java代码............

  import java.io.*;

  import java.lang.Runtime;

  import java.lang.*;

  import java.io.File;

  public class run
  {
    public static void main(String[] args)
    {
      try
      {
    String[] cmd = {"filelpath"};
    Process p = java.lang.Runtime.getRuntime().exec(cmd);
    InputStream Out = p.getInputStream();
    InputStreamReader r = new InputStreamReader(Out);
    BufferedReader in = new BufferedReader(r);
    String line;
    while ((line = in.readLine()) != null)
    {System.out.println(line);}
    in.close();
    System.out.println("Done.");
     }
    catch (IOException ex) 
    {
     ex.printStackTrace();
     }

   } //void

 } //main

2 个答案:

答案 0 :(得分:2)

尝试使用fflush()明确刷新stdout

int main()

{
int i;
    for(i=1; i<=10; i++)
    {
       printf("%d\n", i);
       sleep(1);
       fflush(stdout);
    }   
} //main
默认情况下,

printf()是行缓冲的。因此printf()中的换行符应立即刷新输出。但是这里stdout没有附加到终端而是附加到java进程。

答案 1 :(得分:0)

看起来在程序终止之前不会读取C程序的所有输出。也许它是缓冲的。尝试在不使用r的情况下阅读BufferedReader