带有 /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 上的终端信息的主要内容,如果未能解决你的问题,请参考以下文章

AIX文件系统之系统安装过程中创建的文件系统

linux系统/proc/stat信息与top的cup信息的联系及区别

aix系统命令

深入理解linux系统下proc文件系统内容

深入理解linux系统下proc文件系统内容

Linux 进程管理命令之ps