运行 来自 java 的 dd 命令
Running dd command from java
当我们 运行 dd
没有任何选项时,它的默认行为是从标准输入中获取输入,并在遇到 EOF (control + D)
时再次将输入的所有内容推送到标准输出。
有点像这样
[ec2-user@ip ~]$ dd
This is line 1
This is line 2
This is line 1
This is line 2
0+2 records in
0+1 records out
30 bytes (30 B) copied, 9.7963 s, 0.0 kB/s
[ec2-user@ip ~]$
我正在尝试在 java 代码中模拟同样的事情。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
Process p = Runtime.getRuntime().exec("dd ");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = br.readLine();
while (str != null) {
System.out.println(str);
str = br.readLine();
}
}
}
到目前为止,我可以将内容写入标准输入,但我不知道如何发送 EOF(我看过关于如何从 java 发送 EOF 的帖子,但这里似乎没有任何作用) .
此外,我不知道如何将 dd
的输出输出到标准输出(即使用 java)。
要写入子进程的标准输入流,您可以使用来自 Process.getOutputStream
的流,因为从您的程序的角度来看,它是一个输出流。要发送 EOF,请关闭它。
例如:
Process p = Runtime.getRuntime().exec("dd ");
PrintStream print = new PrintStream(p.getOutputStream());
print.println("This is line 1");
print.println("This is line 2");
print.close(); // send EOF
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = br.readLine();
while (str != null) {
System.out.println(str);
str = br.readLine();
}
how get the output from dd to the standard output
你已经这样做了:你从 Process.getInputStream
获得的流附加到子进程的标准输出流(同样,从你的程序的角度来看,它是一个“输入”流),所以你阅读从中复制你读到的内容到 System.out.
当我们 运行 dd
没有任何选项时,它的默认行为是从标准输入中获取输入,并在遇到 EOF (control + D)
时再次将输入的所有内容推送到标准输出。
有点像这样
[ec2-user@ip ~]$ dd
This is line 1
This is line 2
This is line 1
This is line 2
0+2 records in
0+1 records out
30 bytes (30 B) copied, 9.7963 s, 0.0 kB/s
[ec2-user@ip ~]$
我正在尝试在 java 代码中模拟同样的事情。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
Process p = Runtime.getRuntime().exec("dd ");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = br.readLine();
while (str != null) {
System.out.println(str);
str = br.readLine();
}
}
}
到目前为止,我可以将内容写入标准输入,但我不知道如何发送 EOF(我看过关于如何从 java 发送 EOF 的帖子,但这里似乎没有任何作用) .
此外,我不知道如何将 dd
的输出输出到标准输出(即使用 java)。
要写入子进程的标准输入流,您可以使用来自 Process.getOutputStream
的流,因为从您的程序的角度来看,它是一个输出流。要发送 EOF,请关闭它。
例如:
Process p = Runtime.getRuntime().exec("dd ");
PrintStream print = new PrintStream(p.getOutputStream());
print.println("This is line 1");
print.println("This is line 2");
print.close(); // send EOF
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = br.readLine();
while (str != null) {
System.out.println(str);
str = br.readLine();
}
how get the output from dd to the standard output
你已经这样做了:你从 Process.getInputStream
获得的流附加到子进程的标准输出流(同样,从你的程序的角度来看,它是一个“输入”流),所以你阅读从中复制你读到的内容到 System.out.