我有一个字符串“rwxrwxrwx”。
如何将其转换为类型mode_t以在chmod系统调用中使用?权限应为-rwxrwxrwx。
答案 0 :(得分:1)
您可以使用此代码。但是,它可以通过for循环和一些模数缩短。
const char *perm = "rwxrwxrwx";
mode_t mode = 0;
if (perm[0] == 'r')
mode |= 0400;
if (perm[1] == 'w')
mode |= 0200;
if (perm[2] == 'x')
mode |= 0100;
if (perm[3] == 'r')
mode |= 0040;
if (perm[4] == 'w')
mode |= 0020;
if (perm[5] == 'x')
mode |= 0010;
if (perm[6] == 'r')
mode |= 0004;
if (perm[7] == 'w')
mode |= 0002;
if (perm[8] == 'x')
mode |= 0001;
答案 1 :(得分:0)
这是一个带有单个表达式的解决方案:
const char *perm = "rwxrwxrwx";
mode_t mode = (((perm[0] == 'r') * 4 | (perm[1] == 'w') * 2 | (perm[2] == 'x')) << 6) |
(((perm[3] == 'r') * 4 | (perm[4] == 'w') * 2 | (perm[5] == 'x')) << 3) |
(((perm[6] == 'r') * 4 | (perm[7] == 'w') * 2 | (perm[8] == 'x')));