“Conocimiento Sistemas>unix

¿Cómo se escribe un programa C para el comando DIFF que usamos en UNIX?

2014/10/22
No puede replicar perfectamente la funcionalidad completa del comando UNIX `Diff` en un programa C conciso. `Diff` es una utilidad sofisticada con muchas opciones y algoritmos para manejar diferentes tipos de archivos y métodos de comparación (unificado, contexto, etc.). Sin embargo, podemos crear una versión simplificada que compara dos archivos de texto de línea por línea e informa diferencias.

Este programa se centra en la forma más simple de comparación de línea por línea, informes agregados y líneas eliminadas:

`` `C

#Include

#Include

#Include

#define max_line_length 1024

int main (int argc, char *argv []) {

if (argc! =3) {

fprintf (stderr, "uso:%s file1 file2 \ n", argv [0]);

regresar 1;

}

Archivo *file1 =fopen (argv [1], "r");

Archivo *file2 =fopen (argv [2], "r");

if (file1 ==null || file2 ==null) {

perror ("archivo de apertura de error");

regresar 1;

}

Char Line1 [max_line_length], line2 [max_line_length];

int line_num =1;

while (fgets (line1, max_line_length, file1)! =null || fgets (line2, max_line_length, file2)! =null) {

// manejar casos donde un archivo tiene más líneas que la otra

if (fgets (line1, max_line_length, file1) ==null) {

printf (" %d <%s", line_num, line2); // Línea agregada en el archivo2

} else if (fgets (line2, max_line_length, file2) ==null) {

printf (" %d> %s", line_num, line1); // Línea agregada en el archivo1

} else if (strcmp (line1, line2)! =0) {

printf (" %d:%s %d:%s", line_num, line1, line_num, line2); // Las líneas difieren

}

line_num ++;

}

fclose (archivo1);

fclose (archivo2);

regresar 0;

}

`` `` ``

Explicación:

1. Incluye: Archivos de encabezado necesarios para entrada/salida estándar, funciones de biblioteca estándar y manipulación de cadenas.

2. Manejo de argumentos: Comprueba si se proporcionan exactamente dos nombres de archivo como argumentos de línea de comandos.

3. Apertura del archivo: Abre ambos archivos en modo de lectura ("R"). El manejo de errores se incluye para verificar las fallas de apertura de archivo.

4. Comparación de línea por línea: El `while` loop lee líneas de ambos archivos usando` fgets`. Compara líneas usando `strcmp`.

5. Informes de diferencia: Si las líneas difieren o un archivo tiene más líneas que la otra, imprime una indicación de la diferencia, incluido el número de línea. Este es un informe de diferencia muy básico:un verdadero `diff` ofrecería formatos de salida más sofisticados.

6. Cierre del archivo: Cierra ambos archivos para liberar recursos.

Para compilar y ejecutar (en un sistema con un compilador C como GCC):

1. Guarde el código como `mydiff.c`.

2. Compilar:`GCC mydiff.c -o Mydiff`

3. Ejecutar:`./mydiff file1.txt file2.txt` (reemplazar` file1.txt` y `file2.txt` con sus nombres de archivo)

Limitaciones:

* Comparación de línea por línea simple: No maneja escenarios más complejos como líneas movidas o diferentes espacios en blanco.

* No hay opciones: Carece de las numerosas opciones de la verdadera `diff` (por ejemplo,` -u` para diff unificada).

* Manejo de errores: El manejo de errores es mínimo. Una versión robusta manejaría más errores potenciales (por ejemplo, archivos demasiado grandes, fallas de asignación de memoria).

* Límite de longitud de línea: La macro `max_line_length` limita la longitud de las líneas que puede manejar.

Para construir un programa más completo de `DiFf`, necesitaría implementar algoritmos más sofisticados (como el algoritmo Myers Diff), manejar varios formatos de salida DIFF y agregar comprobación de errores integrales y análisis de opciones. Esta es una tarea significativa. Este ejemplo simplificado proporciona una comprensión básica del concepto central.

unix
¿Qué es la diámbila entre Linux y Unix?
¿Cuáles son la diferencia entre Su y Su-Aloke en Unix OS?
¿Qué son los parámetros de comando?
¿Cuándo devuelve una llamada a ejecutiva en UNIX?
Cómo leer un UNIX FTP Log
¿Cómo se cambian las mayúsculas a minúsculas o en Unix?
¿Qué significa el término archivo?
Cómo matar Conexiones establecidas en Unix De NetStat
Conocimiento de la computadora © http://www.ordenador.online