gpt4 book ai didi

c - C 中 shmget() 函数的权限

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:16 26 4
gpt4 key购买 nike

我有一个关于 C 中的 shmget() 函数的快速问题。该程序非常简单。它要求用户输入一个 shmid,然后输出 key 、模式、所有者等。

我正在使用 buffer->shm_perm.mode 来获取权限,但它以八进制形式(960 等)提供权限。有什么办法可以更改它,使其显示像“rwx”这样的权限吗?

谢谢

最佳答案

一个(不可重入)函数,用于将 mode_t 值转换为可能由 ls 生成的字符串:

/*
** Convert a mode field into "ls -l" type perms field.
*/
static char *lsperms(int mode)
{
static char *rwx[] = {"---", "--x", "-w-", "-wx",
"r--", "r-x", "rw-", "rwx"};
static char bits[11];

bits[0] = filetypeletter(mode);
strcpy(&bits[1], rwx[(mode >> 6) & 7]);
strcpy(&bits[4], rwx[(mode >> 3) & 7]);
strcpy(&bits[7], rwx[(mode & 7)]);
if (mode & S_ISUID)
bits[3] = (mode & 0100) ? 's' : 'S';
if (mode & S_ISGID)
bits[6] = (mode & 0010) ? 's' : 'l';
if (mode & S_ISVTX)
bits[9] = (mode & 0001) ? 't' : 'T';
bits[10] = '\0';
return(bits);
}

对于共享内存,这可以简化,因为您不需要文件类型(此处未提供函数)或特殊权限位。

/*
** Convert a mode field into "ls -l" type shared memory perms field.
*/
static char *shmperms(int mode)
{
static char *rwx[] = {"---", "--x", "-w-", "-wx",
"r--", "r-x", "rw-", "rwx"};
static char bits[10];

strcpy(&bits[0], rwx[(mode >> 6) & 7]);
strcpy(&bits[3], rwx[(mode >> 3) & 7]);
strcpy(&bits[6], rwx[(mode & 7)]);
bits[9] = '\0';
return(bits);
}

关于c - C 中 shmget() 函数的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16801548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com