C中shmget()函数的权限

时间:2013-05-28 21:09:37

标签: c

我对C中的shmget()函数有一个简单的问题。该程序非常简单。它要求用户输入shmid,然后输出Key,Mode,Owner等。

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

由于

1 个答案:

答案 0 :(得分:2)

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);
}