将字符串转换为mode_t

时间:2016-10-29 16:16:40

标签: c linux string permissions mode

我有一个字符串“rwxrwxrwx”。

如何将其转换为类型mode_t以在chmod系统调用中使用?权限应为-rwxrwxrwx。

2 个答案:

答案 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')));