Pregunta

Estoy usando algo como esto:

char *file;
file = (char *)malloc(BUFSIZE * sizeof(char));
printf("Enter the filename:");
scanf("%s", file);
if(remove(file)) {
   printf("Error while removing");
}

He creado dos archivos:

touch filetobedeleted1.txt
chmod 777 filetobedeleted1.txt

touch filetobedeleted2.txt
chmod 444 filetobedeleted2.txt

Ahora, mi programa elimina tanto los archivos pero no se supone que debe suceder ahora? Cualquiera sabe lo que está mal con el código?

EDIT: Añadido el código para poner el nombre en el archivo ...

Ok ... parece que todo depende de los permisos establecidos en el directorio, pero entonces hay una manera de permisos de archivo uso como un cheque?

¿Fue útil?

Solución

En la semántica del sistema de archivos POSIX, la comprobación de permisos se utiliza para eliminar un archivo es si se puede escribir en el directorio que el archivo está en; no si tiene permiso de escritura en el propio archivo.

(Si el directorio tiene el bit pegajoso, entonces también debe ser el propietario del archivo - /tmp utiliza este).

Otros consejos

La eliminación de un archivo sólo necesita acceso de escritura en el directorio.

En rigor, lo que está eliminando es una referencia al archivo, un enlace duro. El archivo no se borrará hasta que todos los vínculos al archivo se han ido.

Trate con el comando rm!

remove() llama unlink(), y de acuerdo con man 2 unlink, que sólo necesita permisos de escritura en el principal directorio.

Puede utilizar la función getumask() y darle un cheque antes de llamar remove().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top