2009-03-24 10 views
20

¿Cómo suelen eliminar archivos en el sistema operativo Linux? Estoy pensando en usar la llamada a la función unlink, pero me pregunto si tiene una mejor idea, ya que el estándar C++ no menciona la operación de eliminación de archivos y depende del sistema.Eliminar archivo en C++ bajo UNIX

Respuesta

27

Sí, el estándar C++ deja esto al sistema operativo, por lo que si está en Linux (o en cualquier sistema POSIX), unlink() es lo que tiene.

El estándar C proporciona remove(), que podría intentar, pero tenga en cuenta que su behavior is unspecified para otra cosa que un 'archivo normal', por lo que en realidad no te proteja de entrar en detalles específicos de la plataforma del sistema de archivos (enlaces , etc.)

Si desea algo de mayor nivel, más robusto y más portátil, consulte Boost Filesystem.

+0

Uso remove() en todos mis códigos: la portabilidad es importante para algunos de nosotros. –

+0

remove se especifica de hecho en POSIX para ser equivalente a unlink para no-directorios. – Random832

1

unlink es la forma correcta de hacerlo.

13

El estándar incluye una función llamada remove que hace eso. Aunque preferiría boost.filesystem para eso (si ya uso boost de todos modos).

#include <cstdio> 

int main() { 
    std::remove("/home/js/file.txt"); 
} 
2

unlink() está definido por las normas POSIX, y por lo tanto existirá en cualquier sistema compatible con POSIX, y en un buen número que no son compatibles con POSIX también.

0

Tenga en cuenta que los núcleos recientes también ofrecen unlinkat. Esta función es más rápida que unlink si tiene un descriptor de archivo en el directorio.

Cuestiones relacionadas