Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan sama ada Input Standard (stdin) ialah Terminal atau Paip dalam C atau C?

Bagaimanakah Saya Boleh Menentukan sama ada Input Standard (stdin) ialah Terminal atau Paip dalam C atau C?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 04:26:10966semak imbas

How Can I Determine if Standard Input (stdin) is a Terminal or a Pipe in C or C  ?

Menentukan Sambungan Terminal atau Paip dalam C atau C

Apabila melaksanakan program, selalunya perlu untuk menentukan sama ada input standard (stdin ) disambungkan ke terminal atau paip. Perbezaan ini penting untuk memahami jenis input yang diterima oleh program dan melaraskan tingkah laku sewajarnya.

Analisis Masalah

Seperti yang diperhatikan, "python" berkelakuan berbeza bergantung pada sama ada ia dipanggil dari terminal atau melalui paip. Ini menunjukkan bahawa program mengesan kehadiran atau ketiadaan sambungan terminal.

Penyelesaian Pengesanan C atau C

Dalam C atau C , fungsi isatty boleh digunakan untuk tentukan sama ada deskriptor fail yang ditentukan merujuk kepada terminal atau tidak. Ia memerlukan deskriptor fail sebagai hujah, yang biasanya fileno(stdin) untuk stdin.

Contoh Kod

Berikut ialah contoh cara menggunakan isatty dalam C atau C :

#include <stdio.h>
#include <io.h> // For _isatty and _fileno on Windows

int main() {
  if (isatty(fileno(stdin))) {
    printf("stdin is a terminal\n");
  } else {
    printf("stdin is a file or a pipe\n");
  }

  return 0;
}

Pada Windows, fungsi isatty dan fileno diawali dengan garis bawah, jadi kodnya menjadi:

#include <stdio.h>
#include <io.h>

int main() {
  if (_isatty(_fileno(stdin))) {
    printf("stdin is a terminal\n");
  } else {
    printf("stdin is a file or a pipe\n");
  }

  return 0;
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan sama ada Input Standard (stdin) ialah Terminal atau Paip dalam C atau C?. 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