对于打开(O_CREATE)权限,八进制字符串为整数

时间:2016-10-28 14:43:23

标签: c atoi octal string-conversion

如何使用* argv []中的八进制字符串,例如:

open("outfile",O_CREAT | O_RDWR,0777);

0777表示八进制数的权限。

我的代码:

int arC = atoi(argv[optind]);
printf("argv optind %s after atoi %d\n",argv[optind],arC);
int test =des2=open("createfile",O_CREAT | O_RDWR,arC);
printf("fd %d\n",test);

终端输出:

./copymaster -c 0777 in 
argv optind 0777 after atoi 777
fd 5

但权限未设置为0777. open()只是忽略arC

如何将此字符串argv[optind]转换为open()命令的可用表单?

1 个答案:

答案 0 :(得分:3)

当字符串包含十进制表示的整数时,

atoi将字符串转换为整数。

但在您的情况下,数字以八进制表示形式给出,因此您无法使用atoi

strtol函数更通用,因为您可以指定基数(在您的情况下为8)。

替换

int arC = atoi(argv[optind]);    // convert decimal number

通过

int arC = strtol(argv[optind], NULL, 8);   // convert octal number

通过此修改,您的程序将打印出来:

./copymaster -c 0777 in 
argv optind 0777 after strtol 511
...

5110777 octal转换为十进制。