如何将控制台输入从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
}