微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 语言中的“差异”Linux 实用程序实现

如何解决C 语言中的“差异”Linux 实用程序实现

我们的 CS 教授给我们分配了通过编写 C 程序来实现 diff LINUX 命令的作业。

我首先提取了在两个不同数组(line1 和 line2)中作为命令行参数传递的两个文件的行。

那之后怎么办?如何报告诸如 1,3c2,4 之类的更改; 1d0;等

输入将是这样的:

./diff file1.txt file2.txt

(其中,diff 是我需要编写的 C 代码的编译文件名)

阅读这里的差异输出https://www.howtoforge.com/tutorial/linux-diff-command-file-comparison/

(或者,如果您有 LINUX,请尝试在那里使用它以查看输出

我只需要实现这部分,不需要为-c等额外功能编写额外的代码

我已经写了这个:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LSIZ 200 
#define RSIZ 100

// diff Implementation
int main(int argc,char **argv){

    if(argc == 1){printf("No file names given!\n"); exit(1);}         
    if(argc > 3){printf("Cannot have more than 2 file names!\n"); exit(1);}
    
    // FILE 1    
    char line1[RSIZ][LSIZ];
    
    FILE *f1 = fopen(argv[1],"r");
    if(f1==0){ perror("Error opening the File!\n"); exit(1); } 

    int i1 = 0;
    int tot1 = 0;
    while(fgets(line1[i1],LSIZ,f1)){
        line1[i1][strlen(line1[i1]) - 1] = '\0';
        i1++;
    }
    tot1 = i1;   

    fclose(f1);

    // FILE 2    
    char line2[RSIZ][LSIZ];
    
    FILE *f2 = fopen(argv[2],"r");
    if(f2==0){ perror("Error opening the File!\n"); exit(1); } 

    int i2 = 0;
    int tot2 = 0;
    while(fgets(line2[i2],f2)){
        line2[i2][strlen(line2[i2]) - 1] = '\0';
        i2++;
    }
    tot2 = i2;

    fclose(f2);    

}


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。