Paip bernama ialah kaedah komunikasi proses tahap yang agak rendah dalam sistem pengendalian Ia adalah kaedah komunikasi proses yang menggunakan fail sebagai perantara. Dalam bahasa Go, sokongan untuk paip bernama disediakan melalui pakej os. Dalam artikel ini, kami akan memperkenalkan cara menggunakan paip bernama untuk komunikasi antara proses dalam Go.
1. Konsep paip bernama
Paip bernama ialah fail khas yang boleh diakses oleh berbilang proses pada masa yang sama. Dalam sistem Linux, paip bernama ialah jenis fail khas yang wujud di suatu tempat pada sistem fail dan boleh dikongsi antara proses yang berbeza. Paip bernama boleh digunakan untuk memindahkan data antara proses yang berbeza. Oleh kerana paip bernama ialah fail pada sistem fail, ia boleh digunakan untuk berkomunikasi antara semua proses yang mempunyai akses kepada sistem fail.
2. Prinsip asas menggunakan paip bernama dalam Go
Dalam bahasa Go, cara untuk menyambung ke paip bernama adalah dengan menggunakan fungsi dalam pakej os. Paip bernama dibuka dan ditutup menggunakan fungsi yang sepadan dalam pakej os. Proses boleh berkongsi fail paip bernama dengan menghantarnya ke proses lain dan sebarang proses lain yang mengakses fail paip bernama boleh membaca dan menulis data.
3. Gunakan paip bernama untuk berkomunikasi antara dua proses Go
Sangat mudah untuk menggunakan paip bernama untuk berkomunikasi antara dua proses Go. Kami akan menulis dua program Go di sini, salah satu daripadanya akan menulis mesej kepada paip yang dinamakan dan program lain akan membaca mesej daripada paip bernama dan mencetaknya.
package main import ( "fmt" "os" ) func main() { fifo := "/tmp/myfifo" // 命名管道文件路径 msg := "Hello World!" // 要写入管道的消息 // 打开管道文件 pipeout, err := os.OpenFile(fifo, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) if err != nil { fmt.Println("Error: ", err) return } defer pipeout.Close() // 写入消息到管道 _, err = pipeout.WriteString(msg) if err != nil { fmt.Println("Error: ", err) return } fmt.Println("Message sent to named pipe!") }
Dalam baris 5, kami mentakrifkan pemalar fifo
untuk mewakili laluan di mana fail paip yang dinamakan terletak . Kemudian, pada baris 6, kami menentukan mesej yang akan ditulis ke paip. Seterusnya, kami akan membuka fail paip yang dinamakan dan menulis mesej ke paip. Dalam baris 11, kami menggunakan fungsi os.OpenFile()
untuk membuka fail paip yang dinamakan dan pilihan os.O_WRONLY
untuk membuka fail dalam mod tulis sahaja. Seterusnya, dalam baris 15, kami menggunakan fungsi pipeout.WriteString()
untuk menulis mesej ke paip yang dinamakan.
package main import ( "fmt" "os" ) func main() { fifo := "/tmp/myfifo" // 命名管道文件路径 msg := make([]byte, 1024) // 打开管道文件 pipein, err := os.OpenFile(fifo, os.O_RDONLY, 0) if err != nil { fmt.Println("Error: ", err) return } defer pipein.Close() // 读取消息从管道 n, err := pipein.Read(msg) if err != nil { fmt.Println("Error: ", err) return } fmt.Println("Message received from named pipe: ", string(msg[:n])) }
Dalam baris 5, kami telah menentukan pemalar fifo
untuk mewakili paip bernama Laluan di mana fail itu terletak. Kemudian, dalam baris 6, kami mentakrifkan tatasusunan bait msg
untuk menyimpan mesej yang dibaca daripada paip. Seterusnya, kami akan membuka fail paip yang dinamakan dan membaca mesej daripada paip. Dalam baris 11, kami menggunakan fungsi os.OpenFile()
untuk membuka fail paip yang dinamakan dan pilihan os.O_RDONLY
untuk membuka fail dalam mod baca sahaja. Seterusnya, dalam baris 17, kami menggunakan fungsi pipein.Read()
untuk membaca mesej daripada paip yang dinamakan dan menyimpannya ke dalam tatasusunan msg
. Akhirnya, dalam baris 19, kami mencetak mesej yang kami terima.
4. Ringkasan
Artikel ini memperkenalkan kaedah menggunakan paip bernama untuk mencapai komunikasi antara proses dalam bahasa Go. Kami menulis dua program Go, satu daripadanya menulis mesej kepada paip bernama dan program lain membaca mesej daripada paip bernama dan mencetaknya. Perlu diingat bahawa apabila menggunakan paip bernama, setiap proses harus merundingkan susunan paip digunakan, jika tidak, ia akan menyebabkan konflik baca dan tulis, menyebabkan program ranap.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan paip bernama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!