Red de conocimiento informático - Consumibles informáticos - Buscando puntuaciones altas para el flujo del programa del archivo mv.c en el código fuente de Linux~ ~ ~

Buscando puntuaciones altas para el flujo del programa del archivo mv.c en el código fuente de Linux~ ~ ~

1./*Mover la fuente a DEST. Maneja principalmente situaciones entre sistemas de archivos. Si la fuente es un directorio, DEST no debe existir.

2. Si tiene éxito, devuelve verdadero. */

3. Booleano estático

4.do_move (const char *fuente, const char *dest, const struct cp_options *x)

5.{

6.bool copy_to_self;

7.bool rename_succeeded

8.bool ok = copiar (fuente, destino, falso, x ,? _ into _ self amp;rename_success);

9.if (bueno)

10.{

11.char const * dir _ to _ remove

12.if (copiarse a sí mismo)

13.{

14./*Normalmente, cuando SOURCE coincide con DEST o el padre de DEST Cuando los directorios son los mismos , copiar devolverá copy_into_self. En este caso,

15. Sabemos que SOURCE aparece como directorio principal y no tiene sentido mover un directorio a sí mismo.

16. En algunos casos, hacerlo producirá resultados muy intuitivos. Ejecute mkdir b ';touch a c;

17.mv * b ' en un directorio vacío. En este caso, se devolverá un error. mv: no se puede mover el directorio 'b' a su propio subdirectorio 'b/b'. Maneje esto a través de un valor de característica

18., que elimina la copia a su propio directorio, DEST (' b/b ' en este ejemplo), y devuelve un error.

19. */

20.dir _ to _ remove = NULL

21.ok =False;

22.}

23. De lo contrario, si (rename_succeeded)

24.{

25./*El nombre de la fuente se cambia correctamente a DEST, se prohíbe la eliminación de cualquier archivo o se deniega el permiso para cambiar el nombre del archivo* /

26.dir _ to _ remove = NULL

27.}

28. >

30 ./* Esto puede significar que la fuente y DEST están en diferentes dispositivos, o puede significar que la fuente y DEST están en la misma configuración.

31. En espera pero no se permite cambiar el nombre.

32. Es como si usaras ftpfs para aplicar al servidor ftp la carga, descarga y eliminación, pero sin cambiar el nombre.

33. Al verificar can-rename, el número de dispositivo no es confiable porque algunos sistemas crean archivos desde diferentes dispositivos físicos, pero

34. NFS es así).

35. Si la fuente se copia correctamente a DECT, entonces debemos eliminar la fuente.

36. Esta función generalmente solo se usa para copiar cuando el cambio de nombre falla y errno se establece en EXDEV */

37.dir _ to _ remove = source

38.}

39.if (dir_to_remove!=null)

40.{

41.struct rm _ opciones rm _ opciones

42. Enumerar el estado de RM_status;

43.char const * dir[2];

44.rm_option_init. RM_opciones);

45.RM_opciones.

47.dir[1]= NULL;

48.status = rm ((void*) dir, ampRM_options);

49.assert(VALID_STATUS (STATUS)) ;

50.if(estado == RM_ERROR)

51.ok =False;

52.}

53.}

54. Regresar ok;

55.}

56./*Mover el origen del archivo a DEST. Maneja principalmente DEST ES UN DIRECTORIO si DEST_IS_DIRECTORY es un directorio.

57. Devuelve verdadero si tiene éxito. */

58. Booleano estático

59.movefile (char *source, char *dest, bool dest_is_dir,

60. Estructura de construcción cp_options *x)

61.{

62.bool ok

63./*

64. Ambigüedad semántica de mv causada por diferentes semánticas.

65. La función de cambio de nombre de algunos sistemas (como GNU/Linux) maneja el último "/".

66. La función de cambio de nombre en algunos otros sistemas (como Solaris 5, 6, 7, 6 y 7) ignora la última "/".

67.(Consulte los comentarios en el código fuente aquí)

68.*/

69.if (remove_trailing_slash)

70./* bool strip _ trailing _ slashes(char * file)

71. Esta función elimina el último "/"*/

72.strip_trailing_slashes (fuente);

73./*Si el segundo parámetro es un directorio*/

74.if (directorio de destino)

75.{

76./*Obtener la última parte de la ruta completa de la fuente*/

77.char const * src _ basename = last _ componente(fuente);

78./ *Concatenar la última parte y el destino obtenido a la nueva ruta de destino*/

79.char * new_dest = file_name_concat(dest, src_basename, NULL);

79.char p>

80.strip_trailing_slashes(new_dest);

81.ok = do_move (fuente, new_dest, x);

82./*Liberar memoria solicitada*/

83.free(new_dest);

84.}

85./*Si el segundo parámetro no es un directorio* /

86.

87.{

88.ok = do_move (fuente, destino, x

89.

90. está bien;

91.}

Jaja, no te ofendas, no es un diagrama de flujo del programa.