开放(O_CREATE)权限的八进制字符串到整数
octal string to integer for open(O_CREATE) permissions
如何将 *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()
命令可用的形式?
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
...
511
正在 0777 octal
转换为十进制。
如何将 *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()
命令可用的形式?
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
...
511
正在 0777 octal
转换为十进制。