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.