Reputation: 107
Below c program has two arguments a,b if it is match from user input,it print the values. I try to run c execute file in Java ProcessBuilder
, but it does not read execute file.
import java.io.*;
import java.lang.Runtime;
import java.lang.*;
import java.io.File;
import java.lang.ProcessBuilder;
public class arg
{
public static void main(String[] args)
{
try
{
ProcessBuilder pb = new ProcessBuilder("path","-args[1]", "-args[2]");
pb.redirectErrorStream(true);
Process p = pb.start();
String s;
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
OutputStream stdOutput = p.getOutputStream();
stdOutput.close();
while ((s = stdInput.readLine()) != null)
{ System.out.println(s); }
System.out.println("Done.");
stdInput.close();
}//try
catch (IOException ex) { ex.printStackTrace(); }
} //void
} //main
#include <stdio.h>
#include <sys/timeb.h>
#include <string.h>
main(int argc, char **argv)
{
setbuf(stdout, NULL);
int i=1,j,n;
char a,b;
for (i=0; i<argc; i++)
{ printf("%s\n", argv[i]); }
if(!strcmp(argv[1],"a"))
{
if(!strcmp(argv[2], "b"))
{
for( j = 0; j<= 4; j++ )
{ printf("Iteration[%d] %d\n",j, j); }
}
return 0 ;
}
} //main
Upvotes: 0
Views: 321
Reputation: 13041
You probably want to write:
if (args.length >= 2)
ProcessBuilder pb = new ProcessBuilder("path","-" + args[0], "-" + args[1]");
also Java arguments are indexed from 0, not from 1, there is no program name in the first argument like in C.
Upvotes: 0
Reputation: 13821
It's not clear to me what you're trying to do, but if you want to pass the ProcessBuilder
the parameters from the java command line, then you need to do
ProcessBuilder pb = new ProcessBuilder("path", args[0], args[1]); // Note, index starts with 0
The way you do it, you're sending the actual strings "arg[1]"
and "arg[2]"
to your command.
Upvotes: 2