octal string to integer for open(O_CREATE) permissions

atoi, c, octal, string-conversion

Solution

`atoi` converts a string to integer when the string contains the integer in decimal representation.

But in your case the number is given in octal representation, so you cannot use `atoi`.

The `strtol` function is more general, because you can specify the base (8 in your case).

Replace

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

by

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

With this modification your program would print this:

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

`511` being `0777 octal` converted to decimal.

Problem

How to use an octal string from *argv[] for something like: ``` open("outfile",O_CREAT | O_RDWR,0777); ``` 0777 means permission in octal numbers. My code: ``` 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); ``` Terminal output: ``` ./copymaster -c 0777 in argv optind 0777 after atoi 777 fd 5 ``` But permissions are not set to 0777. `open()` just ignores `arC`. How to convert this string `argv[optind]` to a usable form for the `open()` command?

Original source