|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
System
  • Grundläggande datorkunskaper
  • Linux
  • Mac OS
  • Ubuntu
  • Unix
  • Windows
  • Windows Vista
  • Windows XP
  • Windows 7
  • Windows 10
  • Windows 11
  • Windows 2012
  • Windows 2016
  • Windows 2019
  • Windows 2022
  • Apple
  • Android
  • iOS
  • CentOS
  • * Dator Kunskap >> System >> Unix >> Content

    Hur skriver du ett C -program för Diff -kommando som vi använder i Unix?

    Du kan inte perfekt replikera den fullständiga funktionaliteten för kommandot Unix "Diff" i ett kortfattat C -program. `Diff` är ett sofistikerat verktyg med många alternativ och algoritmer för att hantera olika filtyper och jämförelsemetoder (enhetligt, sammanhang etc.). Vi kan dock skapa en förenklad version som jämför två textfiler rad för rad och rapporterar skillnader.

    Detta program fokuserar på den enklaste formen av linje-för-linjejämförelse, rapportering tillagda och raderade linjer:

    `` `c

    #include

    #include

    #include

    #Define Max_Line_Length 1024

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

    if (argc! =3) {

    fprintf (stderr, "Användning:%s fil1 fil2 \ n", argv [0]);

    return 1;

    }

    Fil *fil1 =fopen (argv [1], "r");

    Fil *fil2 =fopen (argv [2], "r");

    if (fil1 ==null || fil2 ==null) {

    perror ("Felöppningsfil");

    return 1;

    }

    char line1 [max_line_length], line2 [max_line_length];

    int line_num =1;

    medan (fgets (line1, max_line_length, fil1)! =null || fgets (line2, max_line_längd, fil2)! =null) {

    // Hantera fall där en fil har fler rader än den andra

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

    printf (" %d <%s", line_num, line2); // rad läggs till i fil2

    } annars om (fgets (line2, max_line_length, fil2) ==null) {

    printf (" %d> %s", line_num, line1); // rad läggs till i fil1

    } annars om (STRCMP (LINE1, LINE2)! =0) {

    printf (" %d:%s %d:%s", line_num, line1, line_num, line2); // linjer skiljer sig åt

    }

    line_num ++;

    }

    fclose (fil1);

    fclose (fil2);

    return 0;

    }

    `` `

    Förklaring:

    1. inkluderar: Nödvändiga rubrikfiler för standardinmatning/utgång, standardbiblioteksfunktioner och strängmanipulation.

    2. Argumenthantering: Kontroller om exakt två filnamn tillhandahålls som kommandoradsargument.

    3. Filöppning: Öppnar båda filerna i läsläge ("R"). Felhantering ingår för att kontrollera om filöppningsfel.

    4. Line-by-Line Jämförelse: "Medan" -slingan läser rader från båda filerna som använder "fgets". Den jämför linjer med `STRCMP '.

    5. Skillnadsrapportering: Om linjer skiljer sig eller en fil har fler rader än den andra, skriver den ut en indikation på skillnaden, inklusive radnumret. Detta är en mycket grundläggande skillnadsrapport - en riktig "diff" skulle erbjuda mer sofistikerade utgångsformat.

    6. Filstängning: Stänger båda filerna för att släppa resurser.

    för att kompilera och köra (på ett system med en C -kompilator som GCC):

    1. Spara koden som `mydiff.c`.

    2. Kompilera:`gcc mydiff.c -o mydiff`

    3. Kör:`./mydiff fil1.txt fil2.txt` (ersätt` fil1.txt` och `fil2.txt` med dina filnamn)

    Begränsningar:

    * enkel linje-för-linje jämförelse: Det hanterar inte mer komplexa scenarier som flyttade linjer eller olika vitrum.

    * Inga alternativ: Det saknar de många alternativen för den verkliga "diff" (t.ex. `-u` för enhetlig diff).

    * Felhantering: Felhantering är minimal. En robust version skulle hantera fler potentiella fel (t.ex. filer för stora, minnesallokeringsfel).

    * Linjelängdsgräns: Makroen `max_line_längd 'begränsar längden på linjerna den kan hantera.

    För att bygga ett mer komplett "diff" -liknande program måste du implementera mer sofistikerade algoritmer (som Myers Diff-algoritmen), hantera olika diff-utgångsformat och lägga till omfattande felkontroll och alternativa parsing. Detta är ett betydande företag. Detta förenklade exempel ger en grundläggande förståelse för kärnkonceptet.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Vad står OSD för?
    ·Vad är den konfiguration som krävs för enstaka och f…
    ·Vad är skript i Linux?
    ·Fördelar & Nackdelar med operativsystemet Unix
    ·Hur Starta Activity Monitor Via ett Unix kommando
    ·Med vilka kommandon visar du filnamn och processer i UN…
    ·Vad är RPM-kommandot?
    ·Unix var ett av de första operativsystemen som impleme…
    ·Varför är Unix stabil?
    ·Vad är kommandot för att hämta de första 10 postern…
    Utvalda artiklarna
    ·Hur att få upp Aktivitetshanteraren Från en startorde…
    ·Hur man diagnostiserar Windows 7 Problem
    ·Hur du formaterar en Toshiba Satellite
    ·Inaktivera återladdning i Vista
    ·Hur du ändrar Task Bar Time & Date till en Sökarinstä…
    ·Så här åtgärdar du NVIDIA-kontrollpanelen som sakna…
    ·Lägga till musik till en iPod med Rythmbox på Ubuntu …
    ·Hur tvinga - sluta en Mac Spinning Ball
    ·Hur fixar man en bullrig bärbar dator med Windows?
    ·Vad är Windows 7 Anytime Upgrade
    Copyright © Dator Kunskap https://www.dator.xyz