带有 /proc 文件系统的 AIX 上的终端信息
Posted
技术标签:
【中文标题】带有 /proc 文件系统的 AIX 上的终端信息【英文标题】:terminal info on AIX with /proc filesystem 【发布时间】:2021-10-13 23:41:06 【问题描述】:我正在尝试使用 AIX 上的 /proc 文件系统获取终端信息。
AIX 上的示例程序
#include <stdio.h>
#include <sys/procfs.h>
#include <sys/sysmacros.h>
#define DEVNO64 0x8000000000000000LL
#define DEVNORSV 0x4000000000000000LL
#define DEV64_valid(_devno) \
((((((dev64_t)(_devno)) & (DEVNO64 | DEVNORSV)) >> 62) == 4) ? 1 : 0)
#define ISDEV_VALID(dev) DEV64_valid(dev)
int main(int argc, char *argv[])
char statfilenm[32];
FILE *fp;
psinfo_t pinfo;
sprintf(statfilenm, "/proc/%d/psinfo", getpid());
fp = fopen(statfilenm, "r");
if (!fp)
return 0;
fread(&pinfo, sizeof(psinfo_t), 1, fp);
fclose(fp);
if(ISDEV_VALID((dev64_t)pinfo.pr_ttydev))
printf("\n %d", minor64((dev64_t)pinfo.pr_ttydev));
else
printf("\n Invalid device");
以上程序也为所有具有有效终端的进程返回“无效设备”输出
喜欢
PID TTY STAT TIME COMMAND
10683272 pts/0 A 0:00 xxxxxxxxxxxxxxx
PID TTY STAT TIME COMMAND
10617844 - A 0:00 xxxxxxxxx
【问题讨论】:
fread()
的返回值是多少?
fread 的返回值为 1,表示它正在读取 size(psinfo) 的 1 个成员
打印pinfo.pr_ttydev
的实际值会得到什么,例如printf("pr_ttydev %llx\n", (unsigned long long)pinfo.pr_ttydev);
?
【参考方案1】:
如果您希望将第 2^63 位移动到第 2^2 位,则移动 61 次:
#define DEV64_valid(_devno) \
((((((dev64_t)(_devno)) & (DEVNO64 | DEVNORSV)) >> 61) == 4)
或者:
#define DEV64_valid(_devno) \
((((((dev64_t)(_devno)) & (DEVNO64 | DEVNORSV)) >> 62) == 2)
【讨论】:
以上是关于带有 /proc 文件系统的 AIX 上的终端信息的主要内容,如果未能解决你的问题,请参考以下文章