Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membuat Program Fikir Ia Berjalan di Terminal?
Cara Mencontohi TTY untuk Program
Apabila program berinteraksi dengan stdin, ia mungkin berkelakuan berbeza berdasarkan sama ada ia adalah terminal atau paip. Untuk mengatasinya, anda boleh menggunakan teknik yang dipanggil emulasi "pseudoterminal" (Pty) untuk menjadikan program anda kelihatan sebagai TTY.
Satu pelaksanaan disediakan dalam kod C di bawah, menggunakan fungsi forkpty. Kod ini menyediakan pseudoterminal, memotong proses anak untuk melaksanakan perintah yang diingini dan memajukan outputnya secara berterusan ke stdout.
#include <signal.h> #include <stdlib.h> #include <sysexits.h> #include <unistd.h> #include <util.h> pid_t child = 0; void sighandler(int signum) { if (child > 0) { killpg(child, signum); exit(signum); } } int main(int argc, char *argv[]) { if (argc < 2) { return EX_USAGE; } int master; child = forkpty(&master, NULL, NULL, NULL); if (child == -1) { perror("failed to fork pty"); return EX_OSERR; } if (child == 0) { execvp(argv[1], argv + 1); perror("failed to execute command"); return EX_OSERR; } signal(SIGHUP, sighandler); signal(SIGINT, sighandler); signal(SIGTERM, sighandler); const int buf_size = 1024; char buf[buf_size]; fd_set fds; ssize_t bytes_read; while (1) { FD_ZERO(&fds); FD_SET(master, &fds); if (select(master + 1, &fds, NULL, NULL, NULL) > 0 && FD_ISSET(master, &fds)) { bytes_read = read(master, buf, buf_size); if (bytes_read <= 0) { return EXIT_SUCCESS; } if (write(STDOUT_FILENO, buf, bytes_read) != bytes_read) { perror("failed to write to stdout"); return EX_OSERR; } } } }
Dengan menyepadukan teknik ini, atur cara anda boleh berinteraksi dengan aplikasi lain dengan berkesan seolah-olah ia beroperasi melalui terminal.
Atas ialah kandungan terperinci Bagaimana untuk Membuat Program Fikir Ia Berjalan di Terminal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!