Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menggunakan paip bernama dalam Go?

Bagaimana untuk menggunakan paip bernama dalam Go?

王林
王林asal
2023-05-11 16:22:361937semak imbas

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.

  1. Contoh Kod-1: Menulis ke Paip Dinamakan
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.

  1. Contoh Kod-2: Membaca dan mencetak mesej daripada paip bernama
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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn