我有一个应用程序,如果直接从Linux控制台运行,需要表现不同.因此,如果用户使用SSH连接以运行FooBar,或者用户走到控制台并直接登录以运行FooBar,我希望它能够执行不同的操作.
我需要调用什么C API来说明这两种情况之间的区别?我在想我必须查看"tty/pts"信息(例如我在运行"ps axf"时看到的信息),但我不确定这是否是最佳解决方案,也不是要调用的API获取这些信息.
提示赞赏.:)
检查ttyname(3)对stdin的返回值应该为您提供进程输入的终端名称.
如果程序在控制台上运行(并且没有重定向它的输入),它将是/ dev/console.您还可以检查stdout以查看它是否已连接到/ dev/console - 查看哪种更适合您的使用方案.
ttyname会告诉您连接到给定文件描述符的终端的名称;例如,ttyname(0)会告诉您标准输入的终端。
如果输入或输出被重定向,这当然会失败。
除此之外,您可以检查各种环境变量(SSH_CONNECTION, SSH_CLIENT, REMOTEHOST, DISPLAY, SESSIONNAME)。 Wireshark具有检测其是否远程运行的逻辑,以便它不会捕获其生成的网络流量;您可能对其get_conn_cfilter函数用于实现此功能的逻辑感兴趣。
| 归档时间: |
|
| 查看次数: |
6190 次 |
| 最近记录: |