Create a file in Linux using C
c
Solution
You need the three-argument form of `open()` when you specify O_CREAT. When you omit the third argument, `open()` uses whatever value happens to be on the stack where the third argument was expected; this is seldom a coherent set of permissions (in your example, it appears that decimal 12 = octal 014 was on the stack).
The third argument is the permissions on the file - which will be modified by the `umask()` value.
int fd2 = open("/tmp/test.svg", O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);
Note that you can create a file without write permissions (to anyone else, or any other process) while still being able to write to it from the current process. There is seldom a need to use execute bits on files created from a program - unless you are writing a compiler (and '.svg' files are not normally executables!).
The S_xxxx flags come from `<sys/stat.h>` and `<fcntl.h>` — you can use either header to get the information (but `open()` itself is declared in `<fcntl.h>`).
Note that the fixed file name and the absence of protective options such as `O_EXCL` make even the revised `open()` call somewhat unsafe.
Problem
I am trying to create a write only file in C on Linux (Ubuntu). This is my code: ``` int fd2 = open ("/tmp/test.svg", O_RDWR|O_CREAT); if (fd2 != -1) { //.... } ``` But why do the files I created have 'xr' mode? How can I create it so that I can open it myself at command prompt? ``` ------xr-- 1 michael michael 55788 2010-03-06 21:57 test.txt* ------xr-- 1 michael michael 9703 2010-03-06 22:41 test.svg* ```