在AFS(安德鲁文件系统)中,可以将不同的流程放入不同的PAG中,我的问题是:如何以编程方式获取某个流程的PAG编号?谢谢。
答案 0 :(得分:1)
您可以通过调用最初由Russ Allbery here发布的VIOC_GETPAG pioctl在C程序中执行此操作:
#include <stdio.h>
#include <afs/param.h>
#include <afs/afssyscalls.h>
#include <afs/vice.h>
#include <afs/vioc.h>
int
main(void)
{
struct ViceIoctl iob;
afs_uint32 pag;
int code;
iob.in = NULL;
iob.in_size = 0;
iob.out = (void *) &pag;
iob.out_size = sizeof(pag);
code = pioctl(NULL, VIOC_GETPAG, &iob, 0);
if (code != 0) {
fprintf(stderr, "Cannot get PAG\n");
return 1;
}
printf("PAG number is: %lu\n", (unsigned long) pag);
return 0;
}
在C程序之外没有用于获取PAG号码的官方接口;说,通过运行一些命令。大多数情况下,您可以通过查看当前流程的补充组列表以及查找编号非常高的组来确定PAG编号。然而,虽然这主要是&#34;工作&#34;目前,在某些情况下,这些信息可能不正确,并且不保证将来可以在所有平台上使用。具体来说,在现代Linux上,PAG号码的权威位置在内核密钥环中,提供组ID只是“尽力而为”。并可能在将来消失。