I am writing a simple code about opening a file with O_CREAT | O_WDONLY | O_EXCL flags. The code looks like this:

int fd = open(fileName, O_WRONLY | O_CREAT | O_EXCL, 0777);

It works well, except for the mode (permission) part. What ever I put in the others part, it always creates a file with r-x.

For example, the permission of the file created from the above code looks like this.


This isn't 777 isn't it ? What am I missing ?

1 Answer 1


Bits in the umask of the current process are cleared when the file is created. In this case, it looks like the umask is 0002 (no world write). Call umask() before calling open() to change that.

Soapbox: please don't create world-writable files unless you're really sure that's what you want. umask exists to save you and your users from exactly that type of vulnerability.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .