ttyname akan memberi tahu Anda nama terminal yang terhubung ke deskriptor file tertentu; misalnya, ttyname(0)
akan memberi tahu Anda terminal stdin.
Ini tentu saja akan gagal jika input atau output dialihkan.
Kecuali itu, Anda dapat memeriksa berbagai variabel lingkungan (SSH_CONNECTION
, SSH_CLIENT
, REMOTEHOST
, DISPLAY
, SESSIONNAME
). Wireshark memiliki logika untuk mendeteksi jika dijalankan dari jarak jauh sehingga tidak menangkap lalu lintas jaringan yang dihasilkannya; Anda mungkin tertarik dengan logika yang digunakan fungsi get_conn_cfilter untuk mengimplementasikan ini.
Memeriksa nilai pengembalian ttyname(3) terhadap stdin Anda akan memberi Anda nama terminal yang memasukkan input dari proses Anda.
Itu akan menjadi /dev/console jika program dijalankan di konsol (dan inputnya tidak dialihkan). Anda juga dapat memeriksa stdout untuk melihat apakah itu terhubung ke /dev/console - lihat mana yang lebih cocok dengan skenario penggunaan Anda.
Saya akan melihat variabel lingkungan sebagai tanda yang masuk akal tentang apa yang terjadi. Saya tidak yakin C API apa yang Anda inginkan untuk itu, tapi saya yakin ada.
Misalnya, baik SSH_CLIENT
atau SSH_CONNECTION
variabel lingkungan disetel di mesin saya terlepas dari klien SSH yang digunakan.
Mungkin ada baiknya memeriksa seberapa universal ini didasarkan pada server SSH yang berjalan di mesin.
Bergantung pada seberapa besar Anda khawatir tentang hal itu dipalsukan, pemeriksaan yang mudah adalah untuk ada/tidaknya variabel lingkungan SSH_CLIENT dan SSH_CONNECTION, dalam hal ini Anda menginginkan getenv
fungsi.