Vladimír Fencák Vladimír Fencák - 2 months ago 12
C Question

octal string to integer for open(O_CREATE) permissions

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.
just ignores

How to convert this string
to a usable form for the


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).


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


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.