Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Membuat Program Saya Berpura-pura Menjadi TTY dalam Linux dan macOS?
Berpura-pura Menjadi TTY: A Deeper Dive
Salah satu cabaran biasa yang dihadapi dalam pengaturcaraan ialah berurusan dengan program yang mendiskriminasi sumber input (seperti stdin) berdasarkan sama ada ia adalah terminal (TTY) atau paip. Untuk menangani perkara ini, anda mungkin perlu membuat program anda berpura-pura menjadi TTY. Dalam artikel ini, kami akan meneroka cara untuk mencapai perkara ini dalam kedua-dua Linux dan macOS menggunakan program binari kendiri, memfokuskan terutamanya pada Go.
Idea utama di sebalik berpura-pura menjadi TTY adalah untuk mencipta pseudo-terminal (juga dikenali sebagai pty). Pty ialah terminal maya yang bertindak seperti terminal biasa, tetapi ia sebenarnya dilaksanakan sebagai sepasang deskriptor fail. Satu daripada deskriptor fail ini digunakan untuk membaca input daripada pty, manakala satu lagi digunakan untuk menulis output padanya.
Kod Go berikut memberikan contoh cara membuat pty dan menjalankan perintah di dalamnya , menangkap outputnya:
package main import ( "io" "log" "os" "os/exec" "runtime" ) func main() { // Get the current operating system. osName := runtime.GOOS // Create a master pty. master, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0) if err != nil { log.Fatal(err) } // Get the slave pty name. slaveName, err := ptsname(master) if err != nil { log.Fatal(err) } // Fork a child process. child, err := os.ForkExec("/bin/sh", []string{"sh", "-c", "ls -la"}, nil, slaveName, master, master) if err != nil { log.Fatal(err) } // Close the master pty. master.Close() // Read output from the slave pty. buf := make([]byte, 1024) for { n, err := os.Read(child, buf) if err == io.EOF { break } if err != nil { log.Fatal(err) } if osName == "linux" { // Remove carriage return (CR) characters. buf = buf[:n-1] } os.Stdout.Write(buf) } // Wait for the child process to exit. child.Wait() }
Kod ini boleh disusun menjadi binari kendiri menggunakan yang berikut arahan:
go build -o ttypretend main.go
Setelah disusun, anda boleh menjalankan program seperti berikut:
./ttypretend
Dan ia akan mengeluarkan kandungan direktori semasa.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Program Saya Berpura-pura Menjadi TTY dalam Linux dan macOS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!