我有以下C
程序。如何將控制檯輸入從Golang傳遞到子進程
#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;
}
我想從Go
語言運行該程序作爲子過程。在我的Go
代碼中,我有一個byte
陣列,我想將其用作我的C
程序的輸入。我嘗試了以下方法,但沒有奏效。
cmd := exec.Command("/home/dodtech/go-workspace/MachineListener/Test")
cmd.Stdout = os.Stdout
err := cmd.Start()
if err == nil {
var ctrlc [9]byte
ctrlc[0] = 0x00
ctrlc[1] = 0x01
ctrlc[2] = 0x02
ctrlc[3] = 0x03
ctrlc[4] = 0x04
ctrlc[5] = 0x05
ctrlc[6] = 0x06
ctrlc[7] = 0x07
ctrlc[8] = 0x08
ctrlc[9] = 0x09
cmd.Stdin = bytes.NewReader(ctrlc[0:])
cmd.Stdin.Read(ctrlc[0:])
}
需要指出的是,上述兩個程序只是一個測試程序,它們只代表我想達到的目標。它們並不意味着高效,並且不是根據編程指南編寫的(例如創建字節數組的方式)。如果我能解決這個小問題的問題,我將能夠將其移植到我的實際軟件代碼中。如果有人能指導我如何做到這一點,我將不勝感激。
任何想法如何使用上述技術將CTRL + C事件發送到子進程?我將NtTrace作爲子進程運行。 NtTrace是一個系統調用追蹤工具,我不能殺死它,因爲它也會殺死我不想要的目標進程。如果我可以將CTRL + C事件傳遞給NtTrace子進程,它將優雅地釋放目標進程然後退出。 – azizulhakim
您可以使用cmd.Process獲取目標進程,然後使用https://golang.org/pkg/os/#Process.Signal指示該進程。如果這不起作用,您可以使用更多上下文發佈另一個問題。 – eugenioy