Crea un archivo en Linux usando C

Estoy tratando de crear un archivo de solo escritura en C en Linux (Ubuntu). Este es mi código:

int fd2 = open ("/tmp/test.svg", O_RDWR|O_CREAT); if (fd2 != -1) { //.... } 

Pero, ¿por qué los archivos que creé tienen el modo ‘xr’? ¿Cómo puedo crearlo para poder abrirlo yo mismo en el símbolo del sistema?

 ------xr-- 1 michael michael 55788 2010-03-06 21:57 test.txt* ------xr-- 1 michael michael 9703 2010-03-06 22:41 test.svg* 

Necesita la forma de tres argumentos de open() cuando especifica O_CREAT. Cuando omite el tercer argumento, open() usa cualquier valor que se encuentre en la stack donde se esperaba el tercer argumento; rara vez es un conjunto coherente de permisos (en su ejemplo, parece que el decimal 12 = octal 014 estaba en la stack).

El tercer argumento son los permisos en el archivo, que serán modificados por el valor umask() .

 int fd2 = open("/tmp/test.svg", O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH); 

Tenga en cuenta que puede crear un archivo sin permisos de escritura (a cualquier otra persona, o cualquier otro proceso) mientras aún puede escribir en él desde el proceso actual. Rara vez es necesario utilizar bits de ejecución en archivos creados desde un progtwig, a menos que esté escribiendo un comstackdor (¡y los archivos ‘.svg’ normalmente no son ejecutables!).

Los indicadores S_xxxx provienen de y : puede usar cualquiera de los encabezados para obtener la información (pero open() se declara en ).

Tenga en cuenta que el nombre del archivo fijo y la ausencia de opciones de protección como O_EXCL hacen que incluso la llamada open() revisada sea algo insegura.

Dar permisos de acceso como tercer parámetro:

 int fd2 = open("/tmp/test.svg", O_RDWR|O_CREAT, 0777); // Originally 777 (see comments) if (fd2 != -1) { // use file descriptor close(fd2); } 

Al hacer esto, todos los permisos de lectura, escritura y ejecución se otorgarán al usuario, grupo y otros. Modifique el tercer parámetro según su uso.