我正在尝试chmod()从我的C程序调用该函数,但它没有设置正确的权限,除非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;
}
Run Code Online (Sandbox Code Playgroud)
是的,零是必要的,除非您提前将数字转换为正确的基数.整数文字中的前导零使C以八进制读取数字,这与0x使其以十六进制读取整数的方式相同.如果使用strtol,则可以提供base参数8以读取八进制的整数.