Menentukan Sifat Input Standard: Terminal atau Paip
Dalam pelbagai senario, ia boleh memberi manfaat untuk membezakan sama ada input standard (stdin) mewakili terminal atau paip. Perbezaan ini menjadi jelas dalam perbezaan dalam tingkah laku yang dipamerkan oleh Python apabila digunakan tanpa hujah dari terminal, berbanding apabila input berpaip disediakan. Untuk meniru pengesanan sedemikian, pelbagai bahasa pengaturcaraan, termasuk C, C dan Qt, menawarkan pendekatan yang berbeza.
Pendekatan Unix: isatty
Untuk C dan C , Unix panggilan sistem isatty() menyediakan cara untuk memastikan sifat stdin. Fungsi ini mengambil integer yang mewakili deskriptor fail bagi fail yang disoal sebagai parameternya. Untuk stdin, ini biasanya diperoleh menggunakan ungkapan fileno(stdin). Jika deskriptor fail sepadan dengan terminal, isatty() mengembalikan nilai bukan sifar, menunjukkan bahawa stdin ialah terminal. Sebaliknya, nilai sifar menunjukkan bahawa stdin bukan terminal, mungkin mewakili paip atau fail.
Contoh:
#include <stdio.h> #include <io.h> ... if (isatty(fileno(stdin))) printf("stdin is a terminal\n"); else printf("stdin is a file or a pipe\n");
Pendekatan Qt: QTextStream
Untuk Qt, kaedah berbeza diperlukan kerana rangka kerja pendekatan berorientasikan objek. Qt menggunakan QTextStream untuk berinteraksi dengan stdin, yang boleh digunakan untuk menentukan sama ada stdin berasal dari terminal atau tidak. Contoh QTextStream dibuat dengan memanggil QTextStream(stdin) dengan stdin sebagai hujah. Kod berikut menunjukkan pendekatan ini:
QTextStream qin(stdin); bool isTerminal = qin.device()->isInteractive();
Dalam keadaan ini, isInteractive mengembalikan benar jika stdin ialah terminal dan palsu jika ia adalah paip atau fail.
Atas ialah kandungan terperinci Adakah stdin Terminal atau Paip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!