将字符串转换为 mode_t
Convert string to mode_t
我有一个字符串"rwxrwxrwx"。
如何将其转换为类型 mode_t 以便在 chmod 系统调用中使用?权限应该是 -rwxrwxrwx.
您可以使用此代码。但是,可以使用 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;
这是一个只有一个表达式的解决方案:
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')));
我有一个字符串"rwxrwxrwx"。
如何将其转换为类型 mode_t 以便在 chmod 系统调用中使用?权限应该是 -rwxrwxrwx.
您可以使用此代码。但是,可以使用 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;
这是一个只有一个表达式的解决方案:
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')));