Rumah > pembangunan bahagian belakang > C++ > Adakah stdin Terminal atau Paip?

Adakah stdin Terminal atau Paip?

Susan Sarandon
Lepaskan: 2024-12-29 16:28:16
asal
442 orang telah melayarinya

Is stdin a Terminal or a Pipe?

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");
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan