c - chmod() 是否需要前导零才能正常工作?

标签 c chmod atoi

我试图从我的 C 程序中调用 chmod() 函数,但是它 没有设置正确的权限,除非 mode_t 参数有 其中有前导零。例如 chmod(argv[2],00777) 会起作用, 但是 chmod(argv[2],777) 将设置完成垃圾的权限。

当我尝试使用 atoi() 时,大问题来了,因为它会 丢弃任何前导零。有什么办法可以做到以下几点 即使用户输入没有前导零的值,程序也能正常工作 在命令行中?

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

int main(int argc, char** argv)
{  
    if (argc != 3)
        exit(EXIT_FAILURE);

    if (chmod(argv[2], (mode_t)atoi(argv[1])) != 0)
        printf("Warning: Unable to change file permissions.");

    return 0;
}

最佳答案

是的,零是必需的,除非您提前将数字转换为正确的基数。整数文字中的前导零使 C 以八进制读取数字,与 0x 使其以十六进制读取整数的方式相同。如果您使用 strtol,您可以提供一个值为 8 的 base 参数来读取八进制整数。

关于c - chmod() 是否需要前导零才能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362423/

相关文章:

c - C89 中可移植的用户定义的字符类通过查找表划分,你会这样做吗?

php - 不小心用 PHP 设置了错误的 chmod

c - atoi 沮丧

C++ atoi() 只返回第一个数字

php - 某些 PHP 文件上的 HTTP/1.1 500 273,在这些文件上出现空白页

c - pop 和 peek 在那种情况下做同样的事情?

c - 这段 C 代码中发生了什么? (来自采访)

c - struct 的成员正在被修改,但为什么呢?

PHP 动态文本文件创建