如何将控制台输入从Golang传递到子流程
我有以下如何将控制台输入从Golang传递到子流程,go,Go,我有以下C程序 #include<stdio.h> int main() { int i = 0; char ch; printf("Starting test application\n"); for (i=0; i<10; i++) { ch = getchar(); printf("character at %d = %d\n", i, ch); } return 0; } 需要
C
程序
#include<stdio.h>
int main() {
int i = 0;
char ch;
printf("Starting test application\n");
for (i=0; i<10; i++) {
ch = getchar();
printf("character at %d = %d\n", i, ch);
}
return 0;
}
需要注意的是,上述两个程序都只是一个测试程序,它们只代表我想要实现的目标。它们并不意味着高效,也不是根据编程指南编写的(例如字节数组的创建方式)。如果我能解决这个小问题,我就能把它移植到我的实际软件代码中。如果有人能指导我如何操作,我将不胜感激。如果您想写入子流程标准输入,您应该使用
StdinPipe
比如:
有关完整示例,请参见文档:
那么:
cmd := exec.Command("/home/dodtech/go-workspace/MachineListener/Test")
cmd.Stdin = bytes.NewReader([]byte{
0x00,
0x01,
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08,
0x09,
})
cmd.Stdout = os.Stdout
err := cmd.Start()
if err != nil {
// Handle error
}
这应该能满足您的需要……您知道如何使用上述技术将CTRL+C事件发送到子流程吗?我正在将NtTrace作为子进程运行。NtTrace是一个系统调用跟踪工具,我不能终止它,因为这也会终止我不想要的目标进程。如果我可以将CTRL+C事件传递给NtTrace子进程,它将优雅地释放目标进程,然后退出。如果不可行,您可以发布另一个更具上下文的问题。
subStdin, err := cmd.StdinPipe()
// check err
defer subStdin.Close()
io.WriteString(subStdin, "Hello World")
cmd := exec.Command("/home/dodtech/go-workspace/MachineListener/Test")
cmd.Stdin = bytes.NewReader([]byte{
0x00,
0x01,
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08,
0x09,
})
cmd.Stdout = os.Stdout
err := cmd.Start()
if err != nil {
// Handle error
}