func RunCMD() {
cmd0 := exec.Command("tasklist")
stdout0 , err := cmd0.StdoutPipe() // 獲取命令輸出內容
if err != nil {
fmt.Println(err)
return
}
if err := cmd0.Start(); err != nil { //開始執行命令
fmt.Println(err)
return
}
useBufferIO := false
if !useBufferIO {
var outputBuf0 bytes.Buffer
for {
tempoutput := make([]byte, 256)
n, err := stdout0.Read(tempoutput)
if err != nil {
if err == io.EOF { //讀取到內容的最后位置
break
} else {
fmt.Println(err)
return
}
}
if n > 0 {
outputBuf0.Write(tempoutput[:n])
}
}
fmt.Println(outputBuf0.String())
} else {
outputbuf0 := bufio.NewReader(stdout0)
touput0 , _ , err := outputbuf0.ReadLine()
if err != nil {
return
}
fmt.Println(string(touput0))
}
}
//管道模式
func RunCMDPipe() {
cmd1 := exec.Command("tasklist")
var outputbuf1 bytes.Buffer
cmd1.Stdout = &outputbuf1 //設置輸入
if err := cmd1.Start(); err != nil {
fmt.Println(err)
return
}
if err := cmd1.Wait(); err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s", outputbuf1.Bytes())
}
// 內存的命名管道實現
func MEMPIPE() {
reader, writer := io.Pipe() //返回兩個值 一個是讀io 一個是寫io 讀寫會有鎖
go func() {
output := make([]byte, 100)
n, err := reader.Read(output)
if err != nil {
println(err)
return
}
println("read", n)
}()
input := make([]byte, 26)
for i:=65; i<=90; i++ {
input[i - 65] = byte(i)
}
n, err := writer.Write(input)
if err != nil {
fmt.Println(err)
}
time.Sleep(time.Second * 3)
fmt.Println("Write", n)
}
// 系統的管道 實現原理就是讀寫文件
func SystempPIPE() {
reader, writer, err := os.Pipe() //一個是讀os 一個是寫os 讀寫會有鎖
if err != nil {
println(err)
return
}
go func() {
output := make([]byte, 100)
n, err := reader.Read(output)
if err != nil {
println(err)
return
}
println("read", n)
}()
input := make([]byte, 26)
for i:=65; i<=90; i++ {
input[i - 65] = byte(i)
}
n, err := writer.Write(input)
if err != nil {
fmt.Println(err)
}
time.Sleep(time.Second * 3)
fmt.Println("Write", n)
}